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