- 主题:把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.*
加 spawn 等价于不写 await,都是程序员自己的动作。跟编译器没关系。
你喷这个不行那个不能实现。。怎么不去看一下 eventlet/gevent ? 我说的都是成熟应用十几年的技术了。
【 在 leadu (leadu) 的大作中提到: 】
: 我刚才的问题是,按照你的设想,为啥不同时对merge和read做“加一个 spawn”
: 多线程或是叫并行计算,需要先有足够的经验,知道都会遇到哪些问题,然后才知道为啥会出现各种解法,然后才知道为啥async是其中非常精妙的解法所以各个语言控制者都抢着往自己语言中加
: 经验不足不知道会遇到什么问题,自然会觉得后面这些解法都是一样的,没有什么价值
: ...................
--
FROM 112.47.122.*
他说的没错。。。
比如eventlet首页上Web Crawler Example这个例子吧,把urlopen.read包在协程里实现async,这个做法本质上就不对
tcp/ip原生支持异步读取,同步api也是用异步加wait包出来的,async应该直接用更底层的api而不是多包一遍浪费资源
【 在 hgoldfish (老鱼) 的大作中提到: 】
: 加 spawn 等价于不写 await,都是程序员自己的动作。跟编译器没关系。
: 你喷这个不行那个不能实现。。怎么不去看一下 eventlet/gevent ? 我说的都是成熟应用十几年的技术了。
--
FROM 27.91.71.*
如果这是抄。。这可能是 python 历史上最失败的一次抄袭。
我倒觉得是 c# 抄了 python,因为 python 用 yield 搞网络编程是 2005 左右开始的。而 c# 加入 async 搞网络编程,是从 2012 开始的。
我刚查了 wiki
https://en.wikipedia.org/wiki/Async/await
【 在 leadu (leadu) 的大作中提到: 】
: async不是python抄的c#的么?async/await上面我已经给出证据是c#发明的,如果caml里面没有的话
--
FROM 112.47.122.*
哇。您老又懂 eventlet 了!
【 在 xiaoju (可爱的龙猫) 的大作中提到: 】
: 他说的没错。。。
: 比如eventlet首页上Web Crawler Example这个例子吧,把urlopen.read包在协程里实现async,这个做法本质上就不对
: tcp/ip原生支持异步读取,同步api也是用异步加wait包出来的,async应该直接用更底层的api而不是多包一遍浪费资源
: ...................
--
FROM 112.47.122.*
引用的官网原话,你是说官网也没你懂eventlet么?
import eventlet
# note: this urllib import doesn't work in Python2
from eventlet.green.urllib.request import urlopen
urls = [
"http://www.google.com/intl/en_ALL/images/logo.gif",
"https://wiki.secondlife.com/w/images/secondlife.jpg",
"http://us.i1.yimg.com/us.yimg.com/i/ww/beta/y3.gif",
]
def fetch(url):
return urlopen(url).read()
pool = eventlet.GreenPool()
for body in pool.imap(fetch, urls):
print("got body", len(body))
【 在 hgoldfish (老鱼) 的大作中提到: 】
: 标 题: Re: 把js全干掉,统一成ts,有没有搞头?
: 发信站: 水木社区 (Sun Jul 4 12:16:42 2021), 站内
:
: 哇。您老又懂 eventlet 了!
:
: 【 在 xiaoju (可爱的龙猫) 的大作中提到: 】
: : 他说的没错。。。
: : 比如eventlet首页上Web Crawler Example这个例子吧,把urlopen.read包在协程里实现async,这个做法本质上就不对
: : tcp/ip原生支持异步读取,同步api也是用异步加wait包出来的,async应该直接用更底层的api而不是多包一遍浪费资源
: : ...................
:
: --
: 灭绝人性啊
:
:
: ※ 来源:·水木社区 mysmth.net·[FROM: 112.47.122.*]
--
FROM 27.91.71.*
你搞混了好几个概念
async是语法糖,但其不一定是协程,多数时候只是直接调用了NT和POSIX的原生async的IO。
没有async当然也可以写出来很好的async代码,只不过写起来麻烦,大部分KPI码农选择直接调用阻塞版本。
比如ms office从很古老版本开始,读大文件都不会死锁ui,不过大部分其它应用都会。
【 在 hgoldfish (老鱼) 的大作中提到: 】
: 如果这是抄。。这可能是 python 历史上最失败的一次抄袭。
: 我倒觉得是 c# 抄了 python,因为 python 用 yield 搞网络编程是 2005 左右开始的。而 c# 加入 async 搞网络编程,是从 2012 开始的。
: 我刚查了 wiki
: ...................
--
FROM 27.91.71.*
老兄第一句话多余了。
python gevent在处理的时候是等一个语句执行完再执行下一个的。所以你下面这段代码执
行起来不会有逻辑问题,只不过不会并行而已。所以老鱼才会说加个spawn关键字。
js的asyc是新的编程范式,和命令式大不一样。它的程序流向是在cpu时间片上展开的。自然需要有办法表达代码块之间的依赖拓扑关系。如果依赖树没有分叉,完全是顺序执行的,async、await可以省略。有分叉的情况下,还是需要这样一个机制的。不是await,就是promise.done,或者其他。
【 在 leadu (leadu) 的大作中提到: 】
: 看起来你对多线程的理解是有问题的,举个例子:
: var buf = ReadFromFile1();
: MergeContentWithFile2(ref buf);
: var t1 = SaveToDisk(buf);
: var t2 = SaveToServer(buf);
: Task.WhenAll(t1,t2);
: 这段逻辑在你设想的情况下让编译器怎么做?
--
FROM 101.84.136.*
我最担心的是生态圈里会把加减乘除,字符纯操作,isEven isOdd isThirteen…… 全都用async再实现一遍。
【 在 hgoldfish (老鱼) 的大作中提到: 】
: 是的。。
: 内核本身是完全异步的,但是向 userland 提供了同步的抽象。
: 这个事情其实可以由编程语言来完成。
: 在编程语言这个层次做的话,不止于 IO,还可以应用在更广泛的场景里面。
--
FROM 101.84.136.*