協(xié)程庫(kù)state threads library(以下簡(jiǎn)稱st)是一個(gè)基于setjmp/longjmp實(shí)現(xiàn)的C語(yǔ)言版用戶線程庫(kù)或協(xié)程庫(kù)(user level thread)?;窘榻B在這 http://state-threads.sourceforge.net/docs/st.html。這里有一個(gè)基本的協(xié)程例子 http://www.csl.mtu.edu/cs4411.ck/www/NOTES/non-local-goto/coroutine.html, 可以了解setjmp和longjmp的基本用法。如還有不懂,請(qǐng)自行查閱其他資料。
從中可以看出,IA(Internet Application)架構(gòu)演化歷史:
1.多進(jìn)程MP
以Apache為代表的web server。創(chuàng)建進(jìn)程服務(wù)新用戶,開銷過(guò)高。調(diào)度單位是進(jìn)程。
2.多線程MT
創(chuàng)建新線程服務(wù)新用戶,線程間上下文切換,鎖競(jìng)爭(zhēng)等等,增加了額外開銷。調(diào)度單位是線程。
3.事件驅(qū)動(dòng)狀態(tài)機(jī)EDSM
基于IO復(fù)用機(jī)制,實(shí)現(xiàn)大量并發(fā)請(qǐng)求的處理。但程序是一體的,并不是基于線程,新程序需要從頭開始。該模式下主要使用回調(diào)和狀態(tài)參數(shù)來(lái)進(jìn)行上下文切換,實(shí)際上是以一種非常艱難和痛苦的方式實(shí)現(xiàn)了類似線程和棧的思想。ESDM最大的問題是其“將線性思路分解成大量的回調(diào)所固有的復(fù)雜性”,導(dǎo)致程序難以實(shí)現(xiàn),擴(kuò)展和維護(hù)。
傳統(tǒng)EDSM程序架構(gòu):
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動(dòng)安全 [無(wú)線安全]玩轉(zhuǎn)無(wú)線電——不安全的藍(lán)牙鎖 2017-07-26
- 消息隊(duì)列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標(biāo)分割】 2017-07-26
- 詞向量-LRWE模型-更好地識(shí)別反義詞同義詞 2017-07-26
- 從棧不平衡問題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實(shí)現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解 2017-07-26
- 阿里移動(dòng)安全 Android端惡意鎖屏勒索應(yīng)用分析 2017-07-26
- 集合結(jié)合數(shù)據(jù)結(jié)構(gòu)來(lái)看看(二) 2017-07-26