pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

Java 線程與操作系統線程

Java Threads vs OS Threads(Java 線程與操作系統線程)
本文介紹了Java 線程與操作系統線程的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

限時送ChatGPT賬號..

看起來我搞砸了 Java 線程/操作系統線程和解釋語言.

Looks like I have messed up with Java Threads/OS Threads and Interpreted language.

在開始之前,我確實了解綠色線程是 Java 線程,其中線程由 JVM 負責,整個 Java 進程僅作為單個 OS 線程運行.因此在多處理器系統上它是無用的.

Before I begin, I do understand that Green Threads are Java Threads where the threading is taken care of by the JVM and the entire Java process runs only as a single OS Thread. Thereby on a multi processor system it is useless.

現在我的問題是.我有兩個線程 A 和 B.每個線程都有 10 萬行獨立代碼.我在多處理器系統上的 Java 程序中運行這些線程.每個線程將被賦予一個本機操作系統線程來運行,它可以在不同的 CPU 上運行,但由于 Java 被解釋,這些線程將需要一次又一次地與 JVM 交互以將字節碼轉換為機器指令?我對嗎 ?如果是,那么對于較小的程序,Java 線程不會是一個很大的優勢?

Now my questions is. I have two Threads A and B. Each with 100 thousand lines of independent code. I run these threads in my Java Program on a multiprocessor system. Each Thread will be given a native OS Thread to RUN which can run on a different CPU but since Java is interpreted these threads will require to interact with the JVM again and again to convert the byte code to machine instructions ? Am I right ? If yes, than for smaller programs Java Threads wont be a big advantage ?

一旦 Hotspot 編譯了這兩個執行路徑,它們都可以和原生線程一樣好?我說的對嗎?

Once the Hotspot compiles both these execution paths both can be as good as native Threads ? Am I right ?

:另一個問題是,假設您有一個 Java 線程,其代碼不是 JIT 編譯的,您創建該線程并 start() 嗎?操作系統線程和 JVM 如何交互來運行該字節碼?

: An alternate question can be, assume you have a single Java Thread whose code is not JIT compiled, you create that Thread and start() it ? How does the OS Thread and JVM interact to run that Bytecode ?

謝謝

推薦答案

每個線程都會被賦予一個原生操作系統線程到 RUN 可以運行在不同的 CPU,但由于 Java 是解釋這些線程將需要再次與 JVM 交互再次將字節碼轉換為機器指令 ?我說的對嗎?

Each Thread will be given a native OS Thread to RUN which can run on a different CPU but since Java is interpreted these threads will require to interact with the JVM again and again to convert the byte code to machine instructions ? Am I right ?

你混合了兩種不同的東西;由 VM 完成的 JIT 和 VM 提供的線程支持.在內心深處,你所做的一切都會轉化為某種本機代碼.使用線程的字節碼指令與訪問線程的 JIT 代碼沒有什么不同.

You are mixing two different things; JIT done by the VM and the threading support offered by the VM. Deep down inside, everything you do translates to some sort of native code. A byte-code instruction which uses thread is no different than a JIT'ed code which accesses threads.

如果是,那么對于較小的程序 Java線程不會是一個很大的優勢?

If yes, than for smaller programs Java Threads wont be a big advantage ?

在這里定義小.對于短暫的進程,是的,線程不會產生太大的影響,因為您的順序執行速度足夠快.請注意,這又取決于要解決的問題.對于 UI 工具包,無論應用程序多么小,都需要某種線程/異步執行來保持 UI 響應.

Define small here. For short lived processes, yes, threading doesn't make that big a difference since your sequential execution is fast enough. Note that this again depends on the problem being solved. For UI toolkits, no matter how small the application, some sort of threading/asynchronous execution is required to keep the UI responsive.

當您擁有可以并行運行的東西時,線程也很有意義.一個典型的例子是在線程中進行大量 IO 并在另一個中進行計算.你真的不想僅僅因為你的主線程被阻塞做 IO 而阻塞你的處理.

Threading also makes sense when you have things which can be run in parallel. A typical example would be doing heavy IO in on thread and computation in another. You really wouldn't want to block your processing just because your main thread is blocked doing IO.

一旦 Hotspot 編譯了這兩個執行路徑都可以和本機線程?我說的對嗎?

Once the Hotspot compiles both these execution paths both can be as good as native Threads ? Am I right ?

請參閱我的第一點.

線程確實不是靈丹妙藥,尤其是當涉及到使用線程使代碼運行得更快"這一常見誤解時.一點閱讀和經驗將是你最好的選擇.我可以推薦一份這本很棒的書嗎?:-)

Threading really isn't a silver bullet, esp when it comes to the common misconception of "use threads to make this code go faster". A bit of reading and experience will be your best bet. Can I recommend getting a copy of this awesome book? :-)

@Sanjay:事實上,我現在可以重新構建我的問題.如果我有一個線程代碼尚未經過 JIT 處理操作系統線程執行它?

@Sanjay: Infact now I can reframe my question. If I have a Thread whose code has not been JIT'd how does the OS Thread execute it ?

我再說一遍,線程是與 JIT 完全不同的概念.讓我們試著簡單地看一下程序的執行:

Again I'll say it, threading is a completely different concept from JIT. Let's try to look at the execution of a program in simple terms:

java pkg.MyClass -> VM 定位方法要運行 -> 開始執行逐行方法的字節碼->將每個字節碼指令轉換為它的原生對應物 -> 指令由操作系統執行 -> 執行的指令通過機器

java pkg.MyClass -> VM locates method to be run -> Start executing the byte-code for method line by line -> convert each byte-code instruction to its native counterpart -> instruction executed by OS -> instruction executed by machine

當 JIT 啟動時:

java pkg.MyClass -> VM 定位方法運行 已經過 JIT 的 ->找到相關的 native 代碼對于那個方法->指令由操作系統執行 -> 執行的指令通過機器

java pkg.MyClass -> VM locates method to be run which has been JIT'ed -> locate the associated native code for that method -> instruction executed by OS -> instruction executed by machine

如您所見,無論您遵循何種路線,VM 指令都必須在某個時間點映射到其本地對應項.是否存儲該本機代碼以供進一步重用或在其他情況下丟棄(優化,記得嗎?).

As you can see, irrespective of the route you follow, the VM instruction has to be mapped to its native counterpart at some point in time. Whether that native code is stored for further re-use or thrown away if a different thing (optimization, remember?).

因此回答您的問題,每當您編寫線程代碼時,它 被翻譯為本機代碼并由操作系統運行.翻譯是即時完成還是在那個時間點查找是完全不同的問題.

Hence to answer your question, whenever you write threading code, it is translated to native code and run by the OS. Whether that translation is done on the fly or looked up at that point in time is a completely different issue.

這篇關于Java 線程與操作系統線程的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

相關文檔推薦

Parsing an ISO 8601 string local date-time as if in UTC(解析 ISO 8601 字符串本地日期時間,就像在 UTC 中一樣)
How to convert Gregorian string to Gregorian Calendar?(如何將公歷字符串轉換為公歷?)
Java: What/where are the maximum and minimum values of a GregorianCalendar?(Java:GregorianCalendar 的最大值和最小值是什么/在哪里?)
Calendar to Date conversion for dates before 15 Oct 1582. Gregorian to Julian calendar switch(1582 年 10 月 15 日之前日期的日歷到日期轉換.公歷到儒略歷切換)
java Calendar setFirstDayOfWeek not working(java日歷setFirstDayOfWeek不起作用)
Java: getting current Day of the Week value(Java:獲取當前星期幾的值)
主站蜘蛛池模板: 密集架|电动密集架|移动密集架|黑龙江档案密集架-大量现货厂家销售 | 厚壁钢管-厚壁无缝钢管-小口径厚壁钢管-大口径厚壁钢管 - 聊城宽达钢管有限公司 | 青岛成人高考_山东成考报名网 | 净水器代理,净水器招商,净水器加盟-FineSky德国法兹全屋净水 | PCB厂|线路板厂|深圳线路板厂|软硬结合板厂|电路板生产厂家|线路板|深圳电路板厂家|铝基板厂家|深联电路-专业生产PCB研发制造 | 运动木地板厂家,篮球场木地板品牌,体育场馆木地板安装 - 欧氏运动地板 | 回转窑-水泥|石灰|冶金-巩义市瑞光金属制品有限责任公司 | 金属抛光机-磁悬浮抛光机-磁力研磨机-磁力清洗机 - 苏州冠古科技 | 厚壁钢管-厚壁无缝钢管-小口径厚壁钢管-大口径厚壁钢管 - 聊城宽达钢管有限公司 | 合肥钣金加工-安徽激光切割加工-机箱机柜加工厂家-合肥通快 | 哈希余氯测定仪,分光光度计,ph在线监测仪,浊度测定仪,试剂-上海京灿精密机械有限公司 | 阿米巴企业经营-阿米巴咨询管理-阿米巴企业培训-广东键锋企业管理咨询有限公司 | TPU薄膜_TPU薄膜生产厂家_TPU热熔胶膜厂家定制_鑫亘环保科技(深圳)有限公司 | 全自动端子机|刺破式端子压接机|全自动双头沾锡机|全自动插胶壳端子机-东莞市傅氏兄弟机械设备有限公司 | 淘气堡_室内儿童乐园_户外无动力儿童游乐设备-高乐迪(北京) | LINK FASHION 童装·青少年装展 河南卓美创业科技有限公司-河南卓美防雷公司-防雷接地-防雷工程-重庆避雷针-避雷器-防雷检测-避雷带-避雷针-避雷塔、机房防雷、古建筑防雷等-山西防雷公司 | 同步带轮_同步带_同步轮_iHF合发齿轮厂家-深圳市合发齿轮机械有限公司 | 超高频感应加热设备_高频感应电源厂家_CCD视觉检测设备_振动盘视觉检测设备_深圳雨滴科技-深圳市雨滴科技有限公司 | ph计,实验室ph计,台式ph计,实验室酸度计,台式酸度计 | 非小号行情 - 专业的区块链、数字藏品行情APP、金色财经官网 | 济宁工业提升门|济宁电动防火门|济宁快速堆积门-济宁市统一电动门有限公司 | 密封圈_泛塞封_格莱圈-[东莞市国昊密封圈科技有限公司]专注密封圈定制生产厂家 | 钢木实验台-全钢实验台-化验室通风柜-实验室装修厂家-杭州博扬实验设备 | SRRC认证|CCC认证|CTA申请_IMEI|MAC地址注册-英利检测 | 定量包装秤,吨袋包装称,伸缩溜管,全自动包装秤,码垛机器人,无锡市邦尧机械工程有限公司 | 合肥制氮机_合肥空压机厂家_安徽真空泵-凯圣精机 | 粒米特测控技术(上海)有限公司-测功机_减速机测试台_电机测试台 | 隔离变压器-伺服变压器--输入输出电抗器-深圳市德而沃电气有限公司 | 锂电混合机-新能源混合机-正极材料混料机-高镍,三元材料混料机-负极,包覆混合机-贝尔专业混合混料搅拌机械系统设备厂家 | 水质监测站_水质在线分析仪_水质自动监测系统_多参数水质在线监测仪_水质传感器-山东万象环境科技有限公司 | 手板_手板模型制作_cnc手板加工厂-东莞天泓 | 嘉兴恒升声级计-湖南衡仪声级计-杭州爱华多功能声级计-上海邦沃仪器设备有限公司 | SMC-ASCO-CKD气缸-FESTO-MAC电磁阀-上海天筹自动化设备官网 | 手持式线材张力计-套帽式风量罩-深圳市欧亚精密仪器有限公司 | 长沙中央空调维修,中央空调清洗维保,空气能热水工程,价格,公司就找维小保-湖南维小保环保科技有限公司 | 双吸泵,双吸泵厂家,OS双吸泵-山东博二泵业有限公司 | 数控专用机床,专用机床,自动线,组合机床,动力头,自动化加工生产线,江苏海鑫机床有限公司 | 假肢-假肢价格-假肢厂家-河南假肢-郑州市力康假肢矫形器有限公司 | 电磁铁_小型推拉电磁铁_电磁阀厂家-深圳市宗泰电机有限公司 | 盐水蒸发器,水洗盐设备,冷凝结晶切片机,转鼓切片机,絮凝剂加药系统-无锡瑞司恩机械有限公司 | MVE振动电机_MVE震动电机_MVE卧式振打电机-河南新乡德诚生产厂家 |