Skip to main content

标 题: async那个架构其实很容易证明会增加复杂度的

发信人: TeacherWei (TW), 信区: Programming
标  题: async那个架构其实很容易证明会增加复杂度的
发信站: BBS 未名空间站 (Sun Jan  6 15:49:16 2019, 美东)

很简单,sync的架构一直都保存context。context的管理,从编程语言,到OS,到处理
器架构,都给予支持和保障。

async那玩意儿,每次callback不可避免要把某些路径重走一遍。如果你不想重走,要
引入一系列中间状态,复杂度依然增加,背着抱着一般沉。

而且,你保存的一系列context,必然把local,global的一把抓都放在一起,尤其是多
连接伪并发的情况,自动机指数变大,很快就会变成恶梦。

这些还是忽略真正的多核并发的情况。

发信人: wdong (万事休), 信区: Programming
标  题: Re: async那个架构其实很容易证明会增加复杂度的
发信站: BBS 未名空间站 (Sun Jan  6 20:04:43 2019, 美东)

CS里面,system和language是两个非常独立的分支。搞language的人,有的要
写编译器做优化,倒是懂system,但是system的人对language的理解还停留
在按face value理解C语言的层次,对新语言的设计靠的也还是朴素的经验
而没上升到科学的层次。

这世界就是这么奇葩。外行人骗外行人能骗出一个经济出来。
 

发信人: netghost (Up to Isomorphism), 信区: Programming
标  题: Re: async那个架构其实很容易证明会增加复杂度的
发信站: BBS 未名空间站 (Sun Jan  6 22:23:03 2019, 美东)

async是很多過程的自然現象。網絡交互的特性就是async的,所以也只能這麼去處理。
至於說現在很多人知道的那個"async",你也知道,面向對像這東西有用沒?我覺得是有
的,
但是大部分人懂的那個OOP是不是個shit,也是一樣的shit。

我認為計算機行業最大的問題就是,現在系統要求開發人員懂某些複雜的結構,但是人
群中能懂這些東西的人的比例遠遠小於行業的需求。所以針對大部分人造出的輪子,
either不是一個這些人能用的輪子,要不就不是一個真正的輪子。


【 在 guvest (我爱你老婆Anna) 的大作中提到: 】
: 两个死循环互相goto的话。可以在脑子里去掉callee和caller的概念。
: 我想前面好几位的意思是,非阻塞不一定需要async await那样处理。
: 例如你也可以自己写一个处理这类问题。例如把jump back forth所需附带的上下文包
: 装成函数的call。

楼上niuheliang已经给了很清楚的解释了。在互联网SERVER上THREADS数量有
限,如果THREAD被I/O阻塞那么系统效率就完了。这个REQUEST堵,那个也堵。
三下两下THREAD POOL就用光了。所以互联网的代码才强调要用ASYNC。有没有
ASYNC效率能差一个MAGNITUDE甚至更多,绝不是简单一个语法糖而已。


发信人: niuheliang (别问我是谁), 信区: Programming
标  题: Re: async那个架构其实很容易证明会增加复杂度的
发信站: BBS 未名空间站 (Mon Jan  7 00:01:29 2019, 美东)

在一个系统里,线程的数量有限。

在互联网应用中,如果因为等待如I/O而占用线程会限制了单机最大并发用户数。

async是在挂起等待时线程可以被重用。因此去除了一个瓶颈。

发信人: NeverLearn (24K golden bear), 信区: Programming
标  题: Re: async那个架构其实很容易证明会增加复杂度的
发信站: BBS 未名空间站 (Tue Jan  8 19:28:56 2019, 美东)

【 在 guvest (我爱你老婆Anna) 的大作中提到: 】
: Goroutines 类似的东西在其他语言里也有啊。
: 不一定async/await才能IO解决阻塞问题。
: 你也可以自己写一个所谓的lightweightthread。
: 取个名字叫做TaskLeaf
: 为什么要在async,await一棵树上挂着才可以解决IO阻塞?
: 我感觉这不符合逻辑。也不符合现实情况。

总之不能用SYNC在那里BLOCKING THREAD,对不对?这个是基本出发点,至于是用ASYNC
/AWAIT还是什么更好的方式其他可以另说。相比于SYNC模式,ASYNC消除了
SERVER端THREAD BLOCKING这个瓶颈,这个就是其优点。

其实你找几个做过电商网站的问问就知道了。他们的WEB SERVICE大量都是ASYNC
CALL。否则到了高峰期一旦THREAD POOL BLOCKING,网站马上就卡住了。

发信人: NeverLearn (24K golden bear), 信区: Programming
标  题: Re: async那个架构其实很容易证明会增加复杂度的
发信站: BBS 未名空间站 (Wed Jan  9 18:11:09 2019, 美东)

【 在 pxu (又呱噪又抠门还偷老婆钱) 的大作中提到: 】
: 其实事实刚好相反,是你和niuheliang根本不懂得software engineering中non-
: blocking和async两个concepts之间的区别,成天拿网站IO胡搅蛮缠。

ASYNC流行是因为可以用来缓解互联网I/O阻塞的,其他形式的阻塞也可以考虑但
是主要用途是在互联网程序上。NIUHELIANG早就点明这一点,你们还在那里拎不
清。什么一个MODULE、SOFTWARE ENGINEERING风马牛不相及的都来了。连ASYNC
为啥流行、在哪里适用都不知道,还要给别人“科普”、“补课”, HOHOHO。

 


发信人: niuheliang (别问我是谁), 信区: Programming
标  题: Re: async那个架构其实很容易证明会增加复杂度的
发信站: BBS 未名空间站 (Thu Jan 10 13:32:47 2019, 美东)

这么说吧,在汇编/机器级有中断这个概念。大致就是外设(I/O)有输入则发一个信号
给CPU,CPU就停下手头工作goto去处理一下。我的知识很陈旧了,是6502和8088开始的
,不知道现在发展成怎么样。特别是多核CPU如何处理中断。

Async其实机理和这个一致。硬件/CPU级中断现在受保护,只有OS能用。Async则是
framework提供一个类似的机制。

Async是个patch,解决IIS(其实Apache也有)的线程瓶颈问题。没有Async,服务器的
效率很低。如前端服务器要配很多CPU,而利用率不到15%。因为大多数工作就是转发然
后等待。用了Async,可以减少CPU核数,利用率高达60%-100%。

我知道还有其它实现技术。我没跟各种(开源)project。一个思路是自己写web 
server。不要想得很难,我写过1-2个。自己处理进来的请求和调度。或者自己写
handler。对实时性要求比较高的应用,这是必须的。
 


 

Comments

Popular posts from this blog

CKA Simulator Kubernetes 1.22

  https://killer.sh Pre Setup Once you've gained access to your terminal it might be wise to spend ~1 minute to setup your environment. You could set these: alias k = kubectl                         # will already be pre-configured export do = "--dry-run=client -o yaml"     # k get pod x $do export now = "--force --grace-period 0"   # k delete pod x $now Vim To make vim use 2 spaces for a tab edit ~/.vimrc to contain: set tabstop=2 set expandtab set shiftwidth=2 More setup suggestions are in the tips section .     Question 1 | Contexts Task weight: 1%   You have access to multiple clusters from your main terminal through kubectl contexts. Write all those context names into /opt/course/1/contexts . Next write a command to display the current context into /opt/course/1/context_default_kubectl.sh , the command should use kubectl . Finally write a second command doing the same thing into ...

OWASP Top 10 Threats and Mitigations Exam - Single Select

Last updated 4 Aug 11 Course Title: OWASP Top 10 Threats and Mitigation Exam Questions - Single Select 1) Which of the following consequences is most likely to occur due to an injection attack? Spoofing Cross-site request forgery Denial of service   Correct Insecure direct object references 2) Your application is created using a language that does not support a clear distinction between code and data. Which vulnerability is most likely to occur in your application? Injection   Correct Insecure direct object references Failure to restrict URL access Insufficient transport layer protection 3) Which of the following scenarios is most likely to cause an injection attack? Unvalidated input is embedded in an instruction stream.   Correct Unvalidated input can be distinguished from valid instructions. A Web application does not validate a client’s access to a resource. A Web action performs an operation on behalf of the user without checkin...