由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 其实Async和NonBlocking是两个概念
相关主题
同步编程真郁闷真正对异步有需求的应该是游戏类服务器
说了半天异步是大势所趋没什么疑问了Typescript是不是实际上反 functional programming 的?
看了一下C#的async await尼玛 callback 真是反人类
请教一个Node.js的疑惑再挖一个语言坑:scala流年不顺
看了一下Meteor很不错goodbug吃数据库应用开发饭的,根本不懂UI,牛逼吹得最大
请教一下:Javascript callback not workinggo channel和clojure core.async哪个好
这年头async IO成了流行了大牛们讨论一下异步编程吧
多线程,异步,并发冲突,fp和其它asynchronous vs non-blocking
相关话题的讨论汇总
话题: async话题: goto话题: callback话题: br
进入Programming版参与讨论
1 (共1页)
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
9
https://www.quora.com/Why-doesnt-Linux-have-a-system-like-IOCP-or-Rio-does
大家评价下

【在 s******e 的大作中提到】
: IOCP 也是loop IO吧
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?这个我倒不知道。
: 你直接谈一下同步异步吧。

相关主题
这年头async IO成了流行了Typescript是不是实际上反 functional programming 的?
多线程,异步,并发冲突,fp和其它尼玛 callback 真是反人类
真正对异步有需求的应该是游戏类服务器再挖一个语言坑:scala流年不顺
进入Programming版参与讨论
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
相关主题
goodbug吃数据库应用开发饭的,根本不懂UI,牛逼吹得最大asynchronous vs non-blocking
go channel和clojure core.async哪个好parallel programming的复杂性分层/流行工具技术名词
大牛们讨论一下异步编程吧goodbug基本不会编程,就会吹牛逼
进入Programming版参与讨论
g****t
发帖数: 31659
s******e
发帖数: 13
22
go 的 goroutine 底层的实现应该是,epoll 和 iocp
async wait 底层是不是也是 iocp?
http://www.cnblogs.com/superstar/archive/2012/03/14/2396136.html
http://www.cnblogs.com/jackdong/archive/2011/07/07/2100289.html
https://www.cnblogs.com/gaochundong/p/csharp_tcp_service_models.html

【在 s********k 的大作中提到】
: nonblocking好做,真正的Async(而不是fake async)难。多少人了解Linux的epoll和
: windows的IOCP,都是nonblocking,但是谁才是真正的async(异步)

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

1 (共1页)
进入Programming版参与讨论
相关主题
parallel programming的复杂性分层/流行工具技术名词看了一下Meteor很不错
goodbug基本不会编程,就会吹牛逼请教一下:Javascript callback not working
学了这么多语言发现还是coffeescript最好用这年头async IO成了流行了
看看大牛们为什么都远离.net多线程,异步,并发冲突,fp和其它
同步编程真郁闷真正对异步有需求的应该是游戏类服务器
说了半天异步是大势所趋没什么疑问了Typescript是不是实际上反 functional programming 的?
看了一下C#的async await尼玛 callback 真是反人类
请教一个Node.js的疑惑再挖一个语言坑:scala流年不顺
相关话题的讨论汇总
话题: async话题: goto话题: callback话题: br