為什麼 Java 堅持多執行緒不選擇協程?

時間 2021-05-06 02:19:51

1樓:Xpecya

最直接的原因我認為是jdbc

協程你想跑滿單核心首先你得非阻塞。但是對於實際專案而言,只要你需要從資料庫獲取資料,就必須用乙個把單執行緒徹底堵死的jdbc api

所以如果現在jdk推出協程,你也只能在不需要jdbc呼叫的場合才能玩玩。而這…真的沒什麼意思。

如果真的要搞協程,首先請推出乙個基於nio的jdbc版本出來,然後各大資料庫廠商跟進,做出nio的實現,然後咱們再談協程…

老實說,等到那一天,你換門語言也早就學明白了

2樓:燎原火

語言級別的目前有非同步的futrue等介面,中介軟體也有這類的介面暴露,

資料庫也提供了類似介面。

對效能特別需要的重要業務,早就把這一套用起來了。

剩下的可能覺得不重要吧。

當然還是希望協程能夠語言級別支援,這樣整個生態更完善了

3樓:

服務端高併發,現在都是slb後面動態開容器。

每個容器裡能伺候100個還是10000個使用者根本無所謂。

乙個能正確使用協程的工程師,在美國這邊,時薪可以開2500個vCPU+5T記憶體的aws ec2集群。(谷歌L4 SWE的水平)

如果只要會多執行緒,印度3000刀乙個月的碼農,成噸的。

所以說,你是請乙個谷歌L4水平的工程師,還是效能將就一下,請乙個印度人,然後多開點容器?

4樓:

提問者可能連基本的程式設計知識都沒有。

協程和執行緒在使用上可以說是沒有區別,協程在多核下同樣有多執行緒面臨的問題,協程通訊的訊息佇列在多執行緒下同樣適用。

還有執行緒不能跑滿核心的說法,更是無稽之談,連復用io都不知道嗎,asio沒聽說過?執行緒是絕對能跑滿cpu的,跑不滿只能是你技術問題。

很多人根本不理解協程和執行緒的優劣,我強烈建議那些小白自己用c和彙編加上epoll寫乙個協程網路庫,很簡單。

協程在很多時候根本不好,它根本不會有執行緒那麼及時。

還有,推薦那些小白,重新學習計算機系統基礎知識,建議書籍《深入理解計算機系統 》。

5樓:扁擔寬 板凳長

如果你用Python 多執行緒,調取內建庫的佇列結構,實現生產者消費者模式來解決問題的話,也已經用上鎖了。鎖這東西你可以用函式式盡量規避,但是該用還是得用

6樓:周翔

面試問多執行緒主要還是考察處理併發問題的技能,是高階工程師必備的技能,和語言和生態環境都沒關係,主要是演算法和資料結構的問題。你說的多執行緒出錯,就是併發讀寫了對併發讀寫不安全的資料結構。

7樓:

並不是場合都需要協議,甚至執行緒。比如數庫 postgreSQL,用的多程序模式,即使某個會話有bug down掉,也完全不影響其它會話。

8樓:Gcrawl

我有個疑問,協程比多執行緒的優勢在哪?比如go的協程和Netty對比,優勢是啥?這個優勢能不能覆蓋帶來的其他負面影響

還有相比加上協程這個由於Google光環熱起來的東西(我是這麼認為的,不認同的請論證下協程相比Netty有啥優勢),jdbc標準支援非同步不是更重要麼

9樓:「已登出」

然而你沒有發現協程本質上是協作式多執行緒嗎(尤其是有棧協程)。

區別就是乙個有搶占乙個沒搶占,沒搶占的那個實現效率更高但要在程式中插入搶占點。

在模型上區別並沒有那麼大吧,除非你依賴「無搶占」這個優點。

但是,在某些具有「併發協程」這種聽名字就很buggy的特性的平台上,這個優點也是不存在的。

不過多執行緒曾經是作為「作業系統沒有非阻塞IO介面」這一bug的work around才出現的,所以在現在作業系統有非阻塞IO介面/用多執行緒方法可以很容易得模擬非阻塞IO的情況下,就出現了用純使用者態多工在代替核心態多工的趨勢,既然是純使用者態,正好又有協程這麼個東西,所以協程和非阻塞IO就混到一起了。

但你真的需要協程嗎?你明明只需要非阻塞IO。而且既然用了協程還去想要「佔滿全部核心」也是很有趣的想法……要佔滿全部核心完全可以用多程序來實現。

10樓:

高併發協程+非同步IO是很重要的我也不明白2023年了還不支援對於C# 好幾年前.Net庫就實現非同步IO和await async 協程了

java 中的hashmap在多執行緒中是不安全的,開發中還經常用,是spring框架幫忙解決了嗎 ?

程式猿弟弟 不安全 第一時間就會想到多執行緒吧。只有在多執行緒併發的情況下才會出現不安全的。我們在開發的過程中,乙個請求就是乙個執行緒。在乙個執行緒裡面做hashmap儲存是沒有問題的。我覺得樓主提的問題應該是spring在使用單利bean物件是如何保證request執行緒的隔離。這樣問才有意義。 ...

為什麼php多執行緒沒人用

ZealReal 程序資源很昂貴,所以不會輕易使用多程序。至於執行緒,php支援的不好,php5後有個協程,php開發人員基本不會去使用,協程相當於使用使用者空間的執行緒 一般執行緒是系統空間 Swoole在非同步及協程方面做的不錯,開始會越來越多人使用,大大提高php的併發能力。 import 潘...

為什麼 MySQL 使用多執行緒,而 Oracle 和 PostgreSQL 使用多程序?

白鯨魚 程序 作業系統中分配資源的基本單位 執行緒 作業系統中排程資源的基本單位 協程 比執行緒更小的執行單元,自帶cpu上下文,乙個協程乙個棧就像方圓 和 哼哈二匠 所說早期unix沒有提供多執行緒,只有多程序。另外不同執行緒模型優劣 這裡不從歷史原因說僅僅從技術上講多執行緒與多程序有什麼什麼好處...