s********k 发帖数: 6180 | 1 nonblocking好做,真正的Async(而不是fake async)难。多少人了解Linux的epoll和
windows的IOCP,都是nonblocking,但是谁才是真正的async(异步) |
T*******x 发帖数: 8565 | 2 能把异步是什么说明白也不容易。
【在 s********k 的大作中提到】 : nonblocking好做,真正的Async(而不是fake async)难。多少人了解Linux的epoll和 : windows的IOCP,都是nonblocking,但是谁才是真正的async(异步)
|
s********k 发帖数: 6180 | 3 举个例子,nonblocking我遇到IO就不再blocking了,这个还比较好理解,但是我怎么
知道我的IO操作完成返回了呢?我是得不停隔段时间去看看?还是我不管OS自动会提醒
我IO完成?
真的异步就是好莱坞名言: Don't call us, we will call you
那么epoll和IOCP哪个算?
【在 T*******x 的大作中提到】 : 能把异步是什么说明白也不容易。
|
T*******x 发帖数: 8565 | 4 哦。那我觉得大家本来就是这么理解的。谈异步要限定边界,不停去看那就不叫异步了。
【在 s********k 的大作中提到】 : 举个例子,nonblocking我遇到IO就不再blocking了,这个还比较好理解,但是我怎么 : 知道我的IO操作完成返回了呢?我是得不停隔段时间去看看?还是我不管OS自动会提醒 : 我IO完成? : 真的异步就是好莱坞名言: Don't call us, we will call you : 那么epoll和IOCP哪个算?
|
g****t 发帖数: 31659 | 5 这里有纯数学问题。以下是我的推测。
axiom a
不管什么办法实现的非阻塞,不管你怎么定义。用任何人用goto都可以很容易的理解。
theorem b1---goto 等价于 while for loop。
theorem b2---for loop 等价于function call。
这2个论文看一下。就可以理解所有类似的花样了。
但是如果你不明白这两个演绎真理,靠自己猜或者经验累积是不行的。
计算机科班出身的优势就在这儿。无可否认计算机是科学。
因为上面这两个原理不是显然的,第一个得了图灵奖。第二个是图灵写的什么一切逻辑
分支等于函数调用。
如果你不懂原理。别人可以随时从goto出发链接应用场景。然后从
原理出发,把goto翻译一下.设计出很多花样让你看不懂。
你没看王垠40岁才发现计算机语言要读数理逻辑。too late
很多通过lisp了解到b2的,跟受洗加入邪教似的,就是因为自然律本身都是会带给人这
个感觉的。
了。
【在 T*******x 的大作中提到】 : 哦。那我觉得大家本来就是这么理解的。谈异步要限定边界,不停去看那就不叫异步了。
|
T*******x 发帖数: 8565 | 6 你这个没有直接谈同步异步吧?
goto等价于while loop,这是结构化程序设计的基本结论。至少从理解上并不难。
第二个是什么?for loop等价于function call?这个我倒不知道。
你直接谈一下同步异步吧。
【在 g****t 的大作中提到】 : 这里有纯数学问题。以下是我的推测。 : axiom a : 不管什么办法实现的非阻塞,不管你怎么定义。用任何人用goto都可以很容易的理解。 : theorem b1---goto 等价于 while for loop。 : theorem b2---for loop 等价于function call。 : 这2个论文看一下。就可以理解所有类似的花样了。 : 但是如果你不明白这两个演绎真理,靠自己猜或者经验累积是不行的。 : 计算机科班出身的优势就在这儿。无可否认计算机是科学。 : 因为上面这两个原理不是显然的,第一个得了图灵奖。第二个是图灵写的什么一切逻辑 : 分支等于函数调用。
|
h******k 发帖数: 810 | 7 b2是说循环等价于递归吗(for loop == recursive function call)?
【在 g****t 的大作中提到】 : 这里有纯数学问题。以下是我的推测。 : axiom a : 不管什么办法实现的非阻塞,不管你怎么定义。用任何人用goto都可以很容易的理解。 : theorem b1---goto 等价于 while for loop。 : theorem b2---for loop 等价于function call。 : 这2个论文看一下。就可以理解所有类似的花样了。 : 但是如果你不明白这两个演绎真理,靠自己猜或者经验累积是不行的。 : 计算机科班出身的优势就在这儿。无可否认计算机是科学。 : 因为上面这两个原理不是显然的,第一个得了图灵奖。第二个是图灵写的什么一切逻辑 : 分支等于函数调用。
|
s******e 发帖数: 13 | 8 IOCP 也是loop IO吧
【在 s********k 的大作中提到】 : nonblocking好做,真正的Async(而不是fake async)难。多少人了解Linux的epoll和 : windows的IOCP,都是nonblocking,但是谁才是真正的async(异步)
|
s********k 发帖数: 6180 | |
g****t 发帖数: 31659 | 10 我不懂什么叫同步异步啊。而且你们前面说的很正确。很多时候就是鸡同鸭讲。
我的意思是,不管你所指的同步异步什么意思。在允许jump, goto的语言里都是很容易
理解的。
难以理解的部分可能是从 goto 这个理解 之上的一些花样包装。
While 也可以很复杂的。假如你按照结构化编程那个人的手续,把一些goto消除变成结
构化。那可以很难懂。
我写几十个goto, 变成while, 然后自称很牛X. 你生气也没用啊。
用function call消除for loop, call的次数就是for的count,
这个trick你找一个讲Y combinator或者Turing combinator的书看下就可以看到。
另外这个很容易理解。function call本身就是跳转到另一段二进制数了啊。等于goto.
For loop也等于goto. 所以for loop等于function call
: 你这个没有直接谈同步异步吧?
: goto等价于while loop,这是结构化程序设计的基本结论。至少从理解上
并不难。
: 第二个是什么?for loop等价于function call?这个我倒不知道。
: 你直接谈一下同步异步吧。
【在 T*******x 的大作中提到】 : 你这个没有直接谈同步异步吧? : goto等价于while loop,这是结构化程序设计的基本结论。至少从理解上并不难。 : 第二个是什么?for loop等价于function call?这个我倒不知道。 : 你直接谈一下同步异步吧。
|
|
|
T*******x 发帖数: 8565 | 11 不错,谢谢。
goto.
【在 g****t 的大作中提到】 : 我不懂什么叫同步异步啊。而且你们前面说的很正确。很多时候就是鸡同鸭讲。 : 我的意思是,不管你所指的同步异步什么意思。在允许jump, goto的语言里都是很容易 : 理解的。 : 难以理解的部分可能是从 goto 这个理解 之上的一些花样包装。 : While 也可以很复杂的。假如你按照结构化编程那个人的手续,把一些goto消除变成结 : 构化。那可以很难懂。 : 我写几十个goto, 变成while, 然后自称很牛X. 你生气也没用啊。 : 用function call消除for loop, call的次数就是for的count, : 这个trick你找一个讲Y combinator或者Turing combinator的书看下就可以看到。 : 另外这个很容易理解。function call本身就是跳转到另一段二进制数了啊。等于goto.
|
g****t 发帖数: 31659 | 12 我都是随便讲的。
我的意思是,goto略等于语义端。就是说不管你什么阻塞,同步异步,
书上画的图不都是goto吗?
那么goto的消除,你可以找一万种办法。消除了那你就可以说自己的牛X。
扯旗放炮,开山立派。最基本的就例如结构化编程。以及functional programming。
然而从数学的角度来讲。还是教科书要理解好。基石了解的比较好的话,
不容易被忽悠去reviented 的小山头当炮灰。
[
发明Lisp的麦卡锡说没见过lambda calculus。
你找谁说理。就冲麦卡锡这个猥琐劲,我觉得拜Lisp的都不懂历史。
]
【在 T*******x 的大作中提到】 : 不错,谢谢。 : : goto.
|
h**l 发帖数: 168 | 13 nonblocking 就是当前线程会不会进入blocking状态
async就是底层东东(比如操统)会不会get the work done and call you back.
基本上是两码事.
【在 s********k 的大作中提到】 : nonblocking好做,真正的Async(而不是fake async)难。多少人了解Linux的epoll和 : windows的IOCP,都是nonblocking,但是谁才是真正的async(异步)
|
s********k 发帖数: 6180 | 14 epoll tells you when a file descriptor is ready to perform a requested
operation – such as “you can read from this socket now”.
IOCP tells you when a requested operation is completed, or failed to
complete – such as “the requested read operation has been completed”.
http://www.ulduzsoft.com/2014/01/practical-difference-between-epoll-and-windows-io-completion-ports-iocp/
【在 h**l 的大作中提到】 : nonblocking 就是当前线程会不会进入blocking状态 : async就是底层东东(比如操统)会不会get the work done and call you back. : 基本上是两码事.
|
T*******x 发帖数: 8565 | 15 真正的async的标志是,一个程序它有一个callback函数,而callback函数什么时候被
调用不归这个程序管。
不过要完全描述async的场景的话,那应该再加上几个要素:
1,上面说过的,一个程序有一个主程序,还有一个callback函数,callback函数什么
时候被调用不归自己管。
2,这个结构的目的是处理某类blocking事件。主程序提交事件,callback是事件结束
的处理。
3,最终还是要有一个配合的sync的程序,管理事件队列,还要不停的去看事件有没有
完成。
要素3,有的时候是自己写的,一个forever loop,离应用程序近。有的时候是操作系
统完成的,自己完全不用管,离应用程序远。离应用程序近,有时候就会模糊,哪有
async啊?都是自己写的,是nonblocking,但都是自己调度。不过async这个概念,这
个模式,是存在的。
【在 s********k 的大作中提到】 : nonblocking好做,真正的Async(而不是fake async)难。多少人了解Linux的epoll和 : windows的IOCP,都是nonblocking,但是谁才是真正的async(异步)
|
g****t 发帖数: 31659 | 16 什么是callback?
这是用大圈小圈,箭头来表示的对吧?
所以这些东西就是goto啊。
我可以大圈,中圈,小圈分别画5个,然后画10个箭头。
然后eliminate the goto in a systematic way。
(
剥离了语意(use cases)和性能之后,箭头的学问就是范畴论,数理逻辑。)
然后我取个名字叫做NeverBlockDedicatedLeafs。
简称 牛逼大了 (NBDL)。
然后让老印去卖给赵策。
所以我的浅见,从代数的角度看,这些东西是类似的。
叫什么名字似乎不是特别重要。
Use case很重要(几个圈适用哪个场合). 但是很不幸,
Use case随着时代是变化的。花很多时间学会一个use case, 说不定下一波反而首先被
灭了。因为use case的关键地方在于计算的时间空间限制要合理满足,来和实际问题对
上号。
: 真正的async的标志是,一个程序它有一个callback函数,而callback函
数什么
时候被
: 调用不归这个程序管。
: 不过要完全描述async的场景的话,那应该再加上几个要素:
: 1,上面说过的,一个程序有一个主程序,还有一个callback函数,
callback函
数什么
: 时候被调用不归自己管。
: 2,这个结构的目的是处理某类blocking事件。主程序提交事件,
callback是事
件结束
: 的处理。
: 3,最终还是要有一个配合的sync的程序,管理事件队列,还要不停的去
看事件
有没有
: 完成。
: 要素3,有的时候是自己写的,一个forever loop,离应用程序近。有的
时候是
操作系
【在 T*******x 的大作中提到】 : 真正的async的标志是,一个程序它有一个callback函数,而callback函数什么时候被 : 调用不归这个程序管。 : 不过要完全描述async的场景的话,那应该再加上几个要素: : 1,上面说过的,一个程序有一个主程序,还有一个callback函数,callback函数什么 : 时候被调用不归自己管。 : 2,这个结构的目的是处理某类blocking事件。主程序提交事件,callback是事件结束 : 的处理。 : 3,最终还是要有一个配合的sync的程序,管理事件队列,还要不停的去看事件有没有 : 完成。 : 要素3,有的时候是自己写的,一个forever loop,离应用程序近。有的时候是操作系
|
T*******x 发帖数: 8565 | 17 你说的对。你说用箭头画示意图,箭头就是goto,写程序消去goto,这个过程是对的,
也很形象。但是async这个概念还是存在的,你怎么抽象它?
【在 g****t 的大作中提到】 : 什么是callback? : 这是用大圈小圈,箭头来表示的对吧? : 所以这些东西就是goto啊。 : 我可以大圈,中圈,小圈分别画5个,然后画10个箭头。 : 然后eliminate the goto in a systematic way。 : ( : 剥离了语意(use cases)和性能之后,箭头的学问就是范畴论,数理逻辑。) : 然后我取个名字叫做NeverBlockDedicatedLeafs。 : 简称 牛逼大了 (NBDL)。 : 然后让老印去卖给赵策。
|
T*******x 发帖数: 8565 | 18 什么是callback?
callback是一个程序的另一个入口。一个程序有一个主入口,还可以有其他的入口。
这样看的话这个程序不是“一个”程序,每个入口算一个程序,它是一堆程序的聚合。
谁调用这些入口,这个不归该程序管。
【在 g****t 的大作中提到】 : 什么是callback? : 这是用大圈小圈,箭头来表示的对吧? : 所以这些东西就是goto啊。 : 我可以大圈,中圈,小圈分别画5个,然后画10个箭头。 : 然后eliminate the goto in a systematic way。 : ( : 剥离了语意(use cases)和性能之后,箭头的学问就是范畴论,数理逻辑。) : 然后我取个名字叫做NeverBlockDedicatedLeafs。 : 简称 牛逼大了 (NBDL)。 : 然后让老印去卖给赵策。
|
g****t 发帖数: 31659 | 19 Callback就是两个圈两个箭头吧?大圈是context.
Callforward是大圈到小圈,类似于OS启动你的main,
Callback的back指的是你的main call 大圈里的一部分。
你们说的async是不是可以类似处理。
https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/
async/
忽略掉这个页面的文字部分。只看你是个箭头图。
这图里面说的async是不是就是6个Goto。
如果你的goto图和这个图类似. 我觉得你都可以说这是adync。
: 你说的对。你说用箭头画示意图,箭头就是goto,写程序消去goto,这个
过程是
对的,
: 也很形象。但是async这个概念还是存在的,你怎么抽象它?
【在 T*******x 的大作中提到】 : 什么是callback? : callback是一个程序的另一个入口。一个程序有一个主入口,还可以有其他的入口。 : 这样看的话这个程序不是“一个”程序,每个入口算一个程序,它是一堆程序的聚合。 : 谁调用这些入口,这个不归该程序管。
|
d******c 发帖数: 2407 | |
|
|
g****t 发帖数: 31659 | |
s******e 发帖数: 13 | |
x****u 发帖数: 44466 | 23 地球上所有的io都是非阻塞的,async只是简化写法而已
【在 s********k 的大作中提到】 : nonblocking好做,真正的Async(而不是fake async)难。多少人了解Linux的epoll和 : windows的IOCP,都是nonblocking,但是谁才是真正的async(异步)
|
w*********l 发帖数: 1337 | 24 你这么说是认为有些op是nonblocking,但是却是synchronous?请问这是怎么回事?
synchronous本来遇到IO就是死等。你又怎么来的nonblocking?
【在 s********k 的大作中提到】 : nonblocking好做,真正的Async(而不是fake async)难。多少人了解Linux的epoll和 : windows的IOCP,都是nonblocking,但是谁才是真正的async(异步)
|
h**l 发帖数: 168 | 25 synchronous遇到IO不是死等,是没有底层的库帮你把IO的活干了,然后通过callback通
知你.
【在 w*********l 的大作中提到】 : 你这么说是认为有些op是nonblocking,但是却是synchronous?请问这是怎么回事? : synchronous本来遇到IO就是死等。你又怎么来的nonblocking?
|
w*********l 发帖数: 1337 | 26 你本来的thread在initiate IO之后就去干了别的事,本来就是async。虽然你的
programming model如果用coroutine的话有可能不需要callback。
看看这篇文章:
http://www.cs.unc.edu/~dewan/242/s07/notes/ipc/node9.html
【在 h**l 的大作中提到】 : synchronous遇到IO不是死等,是没有底层的库帮你把IO的活干了,然后通过callback通 : 知你.
|
h**l 发帖数: 168 | 27 还是限定context比较好,不然这些概念太容易混淆,最后就是鸡对鸭讲. :)
RPC我不太熟,我觉得大家讨论的比较多的是Network IO. 在这个背景下, async 就是操
统帮你的应用程序完成IO, non-blocking就是把对应的socket fd设成 non-blocking
state. 这两件事是独立的而且单独看也是比较容易区分的.混在一起讨论反而会把问题
搞复杂.
【在 w*********l 的大作中提到】 : 你本来的thread在initiate IO之后就去干了别的事,本来就是async。虽然你的 : programming model如果用coroutine的话有可能不需要callback。 : 看看这篇文章: : http://www.cs.unc.edu/~dewan/242/s07/notes/ipc/node9.html
|