- 主题:把js全干掉,统一成ts,有没有搞头?
once await , never back
【 在 hgoldfish (老鱼) 的大作中提到: 】
: 我对 python 最不满意的地方就是加了这个特性。
: js 最大的失误也是加了这个特性。
--
FROM 124.240.15.*
协程破坏了老代码的原子性
【 在 hgoldfish (老鱼) 的大作中提到: 】
: 不是不支持协程,,没看我怎么说的,“多用协程解决一切问题“。
: 我比较希望 js 能够隐式地支持协程。。
: c# 为什么选择 async/await 两个关键词,因为 c# 本身是支持线程的,老旧的 c# 程序都会调用 win32api 里面的阻塞 IO API,以及创建线程做并行计算. 为了在阻塞 IO 这一套语义之外并存地支持协程,c# 不得不额外支持 async 函数,显式地告诉程序员,这是个协程操作。
: ...................
--
FROM 223.198.99.*
比如 全局锁,然后 判断的时候 io 等 协程了。
大概这样的代码
【 在 hgoldfish (老鱼) 的大作中提到: 】
: 原子性?
: 使用协程 IO API 的代码肯定都是新代码,不存在破坏老代码的问题。
--
FROM 223.198.99.*
用全局变量做的业务锁, 在协程里被修改使得锁失效
【 在 hgoldfish (老鱼) 的大作中提到: 】
: js 是单线程的,哪有什么全局锁啊。
--
FROM 223.198.99.*
比如 php swoole 用第三方 composer 库 static 变量问题。
function getUserByIdCachely($id)
{
static $user;
if($user){ return $user;}
$user=UserModel::Get($id);
return $user;
}
【 在 hgoldfish (老鱼) 的大作中提到: 】
: 协程底层就是 promise,只是个语法糖,怎么实现都不会破坏兼容性。
: 就算真的有问题,协程 IO API 是新的 API,使用这一套 API 的人,自然也应该使用协程兼容的业务锁。
: 话说,你们是怎么实现业务锁的。
: ...................
--
FROM 223.198.99.*
有问题是是 static 这句
单线程 协程模式 http 服务器 。 各协程的数据都存在这个变量里了
【 在 hgoldfish (老鱼) 的大作中提到: 】
: 这句话有问题吧:
: $user=UserModel::Get($id);
: UserModel::get() 如果知道有网络请求,那么,要么写成 promise 异步非阻塞回调,要么在子线程里面处理也是异步阻塞回调,要么协程同步阻塞。无论哪一种情况,对 $user 都得加锁啊。
: ...................
--
FROM 223.198.99.*
嗯, once await ,never back.
【 在 qingant (傅红雪) 的大作中提到: 】
: 对。Python加async/await完全没必要,一个库用了这个,就扩散到整个项目
--
FROM 223.198.99.*