- 主题:把js全干掉,统一成ts,有没有搞头?
我刚才的问题是,按照你的设想,为啥不同时对merge和read做“加一个 spawn”
多线程或是叫并行计算,需要先有足够的经验,知道都会遇到哪些问题,然后才知道为啥会出现各种解法,然后才知道为啥async是其中非常精妙的解法所以各个语言控制者都抢着往自己语言中加
经验不足不知道会遇到什么问题,自然会觉得后面这些解法都是一样的,没有什么价值
【 在 hgoldfish 的大作中提到: 】
: “加一个 spawn”, 把我这句话再仔细理解一下。
:
--
FROM 123.116.203.*
async不是python抄的c#的么?async/await上面我已经给出证据是c#发明的,如果caml里面没有的话
【 在 hgoldfish 的大作中提到: 】
: 多线程?what?
: eventlet 是协程,不是线程,我们这里讨论的全都是协程!如果你不懂 python,可以学习一下,但别说 python 抄 c# 这种话。
: python 抄 java 是有的,而且很多。但 python 抄 c# 就是胡话了。
: ...................
--
FROM 123.116.203.*
: python gevent在处理的时候是等一个语句执行完再执行下一个的。
他不是一直在说不喜欢async,希望编译器隐式变协程么,我理解他是希望自动乱序执行的。
我在举例和他聊,他这么做为什么不行。编译器随意改协程,光一个状态修改的时序问题,就会崩掉无数程序,何况还有很多别的问题。
这些都是基础知识啊
【 在 javaboy 的大作中提到: 】
: 老兄第一句话多余了。
: python gevent在处理的时候是等一个语句执行完再执行下一个的。所以你下面这段代码执
: 行起来不会有逻辑问题,只不过不会并行而已。所以老鱼才会说加个spawn关键字。
: ...................
--
FROM 123.116.203.*
你给的wiki链接明确说是dotnet社区最先开始使用的async/await
我上面帖子也给了更详细的介绍,如果caml社区没有的话,2004年的C omega是async/await首次亮相
https://baike.baidu.com/item/C-omega/670256?fr=aladdin
https://www.microsoft.com/en-us/research/project/comega/
在如此明确的证据之下,仍说
: 我倒觉得是 c# 抄了 python,
这是在给python社区招黑
很明显,你分不清楚 线程池类型的协程 和 async/await类型的协程 的区别,所以以为python gevent等也是async类型的协程。
而事实上,python gevent等是线程池类型的协程。线程池类型的协程 在那个年代多的是,连windows xp都支持的功能,各个语言中之前都是一大堆。
你想想,为啥现在各个语言都支持async了,甚至包括c++这种?
改语言并不是很简单的事情,各个语言愿意支持,是因为async完美解决了一大类大家都很头疼的问题。
背后的逻辑是在开喷之前要了解清楚的
【 在 hgoldfish 的大作中提到: 】
: 如果这是抄。。这可能是 python 历史上最失败的一次抄袭。
: 我倒觉得是 c# 抄了 python,因为 python 用 yield 搞网络编程是 2005 左右开始的。而 c# 加入 async 搞网络编程,是从 2012 开始的。
: 我刚查了 wiki
: ...................
--
FROM 123.116.203.*
说的对,先有的python,c和lisp抄袭的python才发明的。微软公司和ibm公司诞生都是开源界搞的,开源社区一天到晚给商业公司捐献源代码
【 在 hgoldfish 的大作中提到: 】
: 什么线程池,你好歹专业一点,要用术语 stackless coroutine 和 stackful coroutine. 说了半天线程池,把我给绕晕了。
不是。你果然分不清楚我说的这俩
: 我认为 c# 仿 python 社区用 generator 做网络 IO 就是一种抄袭。至于关键字是 yield/yield from/await 还不是一样,我猜是 c# 怕被说抄袭,所以故意改的。
: 最近巨硬 wsl 抄 cygwin/colinux,windows terminal 抄 xterm,vscode 抄 atom,可比狥腾第二。
: ...................
--
FROM 123.116.203.*
dotnet社区早就不讨论扩散了,直接平和接受了。四处在改fx,连foreach后面的迭代器都给加上async了
await foreach (var number in GenerateSequence())
{
Console.WriteLine(number);
}
【 在 qingant 的大作中提到: 】
: 对。Python加async/await完全没必要,一个库用了这个,就扩散到整个项目
--
FROM 123.116.203.*
因为多线程开发有各种情况,编译器或库无法决定所有行为
【 在 qingant 的大作中提到: 】
: 与其这么搞,何如改成gevent那样隐式不侵入上层的
--
FROM 123.116.203.*
多写几年多线程代码你和老鱼就明白区别了,最好是c++/rust这种语言的多线程代码。
在一个人不清楚明白会遇到的问题之前,是无法对其讲清楚这些问题的解决方案的。他会以为各种解决方案都是一样的
各个语言纷纷从dotnet社区一个字母都不改的抄async/await走,是因为dotnet这方面对并行计算有很大突破的。
在普通人没有能自己引导一个语言的时候,别急着喷,多想想为啥这些语言的负责人们都没有想到你提出的问题
【 在 qingant 的大作中提到: 】
: 事实上gevent几乎解决了所有问题,如果和async/await比的话,gevent解决了所有async/await试图解决的问题
:
--
FROM 123.116.203.*
所以你们可以试着找python管理团队聊一聊,看看问题出在哪里,为啥gevent行还非要加async,而且各个库也在
: 不过现在 python 社区搞了 asyncio 以后,社区也已经疯了。http3 没人搞,倒是 aiohttp, httpx 什么的一大堆。
别的语言的使用者和你们聊,比较容易触发人的自我保护机制
【 在 qingant 的大作中提到: 】
: 我之前做过类似gevent的协程方案的,用C++做一个Lua的运行时,在运行时层面把所有IO调用转成协程自动调度,用起来就和Go差不多。所以就专业性来说,我不一定比这些语言设计者弱。
--
FROM 123.116.203.*
我前一段时间简单了解过,go的协程其实是ThreadPool.QueueUserWorkItem,毕竟作者之一是os出身的,搞的也和windows xp的QueueUserWorkItem路数是一样的
【 在 xiaoju 的大作中提到: 】
: 我不太清楚Go的玩法,不过正如我刚才说的,task或者promise可不一定是一个并发对象,这东西本质就是一个可等待对象,可以是event,线程,协程或者任何其他东西
:
:
--
FROM 123.116.203.*