日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Lua coroutine vs Java wait/notify

發布時間:2024/1/17 java 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Lua coroutine vs Java wait/notify 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在上文Lua coroutine 不一樣的多線程編程思路 中想到coroutine的運行機制跟Java中的wait/notify很相似,所以寫了一個簡單程序比較一下。

源代碼

Lua code

co = coroutine.create(function(loops)for i = 1, loops docoroutine.yield()end end)local x = os.clock() local loops = 100 * 1000 * 1000 coroutine.resume(co, loops) for i = 1, loops docoroutine.resume(co) end print(string.format("elapsed time: %.2f\n", os.clock() - x))

Java code

public class TestWait {public static void main(String[] args) {WaitClass wc = new WaitClass();wc.start();int loops = 100 * 1000 * 1000;long t1 = System.currentTimeMillis();for (int i = 0; i < loops; i++) {synchronized (wc) {wc.notify();}}long t2 = System.currentTimeMillis();System.out.println("elapsed time: " + (t2 - t1) / 1000l);} }class WaitClass extends Thread {public void run() {while (true) {synchronized (this) {try {this.wait();} catch (InterruptedException e) {e.printStackTrace();}}}} }

運行結果

Lua elapsed time: 53.36
Java elapsed time: 51

CPU占用

運行環境:4core XEON

Lua 1CPU 100%, 其他CPU0%, total 25% (其中CPU sys 0%)

Java 2個CPU 40%-50%, 其他CPU 0%, total 25% (其中CPU sys 5%-10%)

從結果看,coroutine只利用了一個CPU, 和原理所說完全一致。

Java利用了2個CPU, 各占用了50%的CPU時間運行和50%的時間等待,和設計也一致。另外Java用了5-10%的sys CPU時間用于線程context switch

結論

雖然這兩種程序沒有直接可比性,但仍然可以看出一些有趣的地方:

  • Lua雖然在各種性能評比中performance比Java低一個數量級,但在這個場景中也跑平了Java
  • Java為了調用notify/wait, 用了同步鎖,因此測試場景對Java不利。

再談coroutine應用場景

今天又看到qiezi的文章并發編程模型:Thread, Coroutine, Callback … 分析得很深入,對這方面感興趣的可以進一步去深入了解。

另外qiezi在Coroutine在并發程序中的應用中提到四種場景,可以理解是對我上篇文章對coroutine應用場景的一種答案。

  • 狀態機。
  • 異步IO操作:異步IO操作通常是發起一個IO請求,由操作系統完成以后回調指定的方法或者使用其它方式通知。
  • 高并發網絡服務器,高并發服務器除了要處理場景一的情況外,可能還要結合場景二,多線程方案有時候完全不能接受,更多的是基于事件、異步IO或者是混合事件和多線程的模型。
  • 客戶端并發應用
  • 但是我還是覺得存在疑慮,后面幾種我覺得用多線程/線程池模式也可以很好解決。其實select/epoll異步IO方式跟多線程并不矛盾。多線程并不代表每個線程需要recv阻塞在那里。目前網絡服務器的多線程通常是指業務邏輯處理部分使用多線程。比如Java中用mina來處理連接(相當于epoll),mina在收到數據包之后再分發給負責業務邏輯的thread pool處理。如果是CPU密集型任務,簡單把線程池的線程數設成CPU數即可達到性能最佳。這時如果把線程數設成1,就很類似coroutine模式了。而Java模式所增加的消耗,主要是new runnable class以及線程池調度的開銷。

    轉載于:https://blog.51cto.com/timyang/307673

    總結

    以上是生活随笔為你收集整理的Lua coroutine vs Java wait/notify的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 亚洲国产综合av | 亚洲免费在线视频 | 国产精品久久久久久久久久东京 | 哪里可以免费看av | 久久蜜桃视频 | 91夫妻视频| 免费欧美日韩 | 亚洲第一中文字幕 | 国产午夜电影 | 打屁股无遮挡网站 | 亚洲专区在线 | 国产网址在线 | av资源网站 | av大片在线观看 | 最新国产在线视频 | 免费在线看黄色 | 日本成人午夜 | 精品1卡二卡三卡四卡老狼 日韩三级网 | 久久成人免费网站 | 国产麻豆精品在线 | 香蕉视频在线看 | 天天夜夜人人 | 一边摸一边做爽的视频17国产 | 久久成人精品 | 欧美三级午夜理伦三级老人 | av黄色成人| 亚洲熟妇无码一区二区三区 | 成色视频 | 欧美黑人添添高潮a片www | 美女主播福利视频 | 动漫女被黄漫免费视频 | 中文字幕一区二区三区四区免费看 | 奇米色播| 午夜日韩福利 | 日韩精品av一区二区三区 | 欧美日韩一区二区三区69堂 | 午夜在线观看视频网站 | 天堂中文av在线 | 奇米影视首页 | 欧美一级片网址 | 91在线高清视频 | 欧美成人三级在线观看 | 麻豆传媒在线免费 | 久久99热人妻偷产国产 | 一本到在线视频 | 亚洲天堂中文字幕 | 色哟哟一区二区三区四区 | 两个女人互添下身爱爱 | 国产麻豆电影在线观看 | 国产97视频 | 亚洲色图欧美 | 噜噜噜色| 草草影院地址 | 欧美成人国产精品一区二区 | 天堂аⅴ在线最新版在线 | 一区二区在线播放视频 | 国产尤物精品 | 色综合久久久久久 | 尤物精品在线观看 | 午夜少妇久久久久久久久 | 少妇免费毛片久久久久久久久 | 夜夜嗨一区 | 91私密视频 | av无码久久久久久不卡网站 | 蜜臀999| 国产精品亚洲专区无码牛牛 | 男人的天堂免费av | 98超碰在线| 欧美黑粗硬 | 免费黄色入口 | 波多野结衣视频播放 | 婷婷成人av | 伊人情人综合网 | 高清av免费观看 | 爱草av | 免费无码国产v片在线观看 三级全黄做爰在线观看 | 182tv午夜| 亚洲精品99久久久久中文字幕 | 亲吻刺激视频 | 黑料视频在线观看 | 日韩大片免费观看视频播放 | 亚洲啪啪 | 性xxxxx大片免费视频 | 中日韩在线播放 | 老公吃小头头视频免费观看 | 欧美日韩国产免费一区二区三区 | 欧美一级成人 | 天天在线观看 | 欧美成在线视频 | 一区二区三区日韩电影 | 日韩成人小视频 | 免费jizz| 日韩精品视频在线观看网站 | 老司机黄色影院 | 日本黄色网络 | 在线精品国产 | 亚洲第一网址 | www精品一区二区三区 | 亚洲一区免费在线观看 |