多線程開發(fā)用了很久,但是一直沒去深入了解。長久以來一直有一些迷惑。直到深入了解后,才發(fā)現(xiàn)了以前的理解有不少錯誤的地方。
單線程等于同步,多線程等于異步
這種理解很直觀,畢竟只有一個(gè)線程怎么異步?
Node.js表示不服,我就是單線程,我也能異步。談一談Node中的異步和單線程。
看完這篇文章我明白了單線程也能異步,把IO等耗時(shí)的操作比作燒水,我可以在這個(gè)時(shí)候切菜,這就是異步啊。
等等,似乎有點(diǎn)不對,那io又誰來開啟,又誰來通知cpu我已經(jīng)結(jié)束了呢?
Node.js異步IO的實(shí)現(xiàn),這篇文章解決了我的疑惑。
Node.js里面只有自己寫的代碼是跑在主線程上,但是內(nèi)部并不是單線程的,由C編寫的底層開啟了線程做IO操作。
恍然大悟,我現(xiàn)在的理解就是,會有一個(gè)可運(yùn)行的線程池在等待cpu的使用權(quán)。類似IO,網(wǎng)絡(luò)請求這種耗時(shí)干等的操作,線程會放到需要等待的線程池中(阻塞),不會獲取cpu的使用權(quán),直到操作完成
這個(gè)理解了,并發(fā)和并行就很容易了。