導航:首頁 > 創造發明 > 在線程中可以創造進程嘛

在線程中可以創造進程嘛

發布時間:2021-06-07 13:02:32

A. java在單獨的線程裡面不能創建文件嗎

Java中不同的線程是可以同時操作一個文件的,只不過有時候因為進程執行的快慢,會出現數據讀取不同步的問題,例子如下:

Public class Readfile implements Runnable{ public void run(){ FileInputStream inputStream = new FileInputStream(file);//讀數據 byte[] buffer = new byte[1024]; int size; while ((size = inputStream.read(buffer)) > 0) { outputStream.write(buffer, 0, size);//寫數據 } inputStream.close();// outputStream.close(); } public satatic void main(String args []) throws InterruptedException{ Readfile rf = new Readfile(); Thread t1 = new Thread(rf);//開啟一個線程 Thread t2 = new Thread(rf);//開啟第二個線程 t1.start(); t2.start(); }}

B. 在進程中是不是還可以創建子進程

linux不是很清楚,就知道能創建線程,也能創建進程,進程間的關系不清楚

win下是這樣的
可以創建線程,也可以創建其他的進程。但是創建的其他進程不屬於創建它的進程。但是創建他的進程可以控制他創建的進程。好像許可權和優先順序也可以繼承

C. 一個進程最多可以創建多少個線程

1,在平台32位系統,系統佔用2GB地址空間,用戶方式2GB。如果使用VS,鏈接程序開關/SACK 或者/F可以設置線程堆棧大小,默認分配一個線程的堆棧大小是1MB,當CreateThread參數的StackSize大小與鏈接程序設置的不一致時,採用的方法是誰大用誰的,所以用4KB修改當然不會有改變!理論上最大線程數=2GB/1MB=2048。
實際上這個用戶方式的2GB並不會全部用作線程堆棧。首先程序的代碼和數據、進程環境塊、線程環境塊、空指針區域等等也需要佔用一定的地址空間;再者2GB只是虛擬內存,如果非分頁內存被用完,就無法再創建線程,這個與特定機器有關,所以不同機器上做最大線程數測試得到的數字可能不一樣。
2,操作系統給一個系統進程提供的空間是2GB ,而一個線程堆棧的空間默認在啟動的時候是1MB 那麼啟動完2000後,基本上就有2GB了,你可以減小默認堆棧的大小。
3,默認情況下,一個線程的棧要預留1M的內存空間而一個進程中可用的內存空間只有2G,所以理論上一個進程中最多可以開2048個線程
但是內存當然不可能完全拿來作線程的棧,所以實際數目要比這個值要小。你也可以通過連接時修改默認棧大小,將其改的比較小,這樣就可以多開一些線程。如將默認棧的大小改成512K,這樣理論上最多就可以開4096個線程。即使物理內存再大,一個進程中可以起的線程總要受到2GB這個內存空間的限制。比方說你的機器裝了64GB物理內存,但每個進程的內存空間還是4GB,其中用戶態可用的還是2GB。如果是同一台機器內的話,能起多少線程也是受內存限制的。每個線程對象都要站用非頁面內存,而非頁面內存也是有限的,當非頁面內存被耗盡時,也就無法創建線程了。
如果物理內存非常大,同一台機器內可以跑的線程數目的限制值會越來越大。

在Windows下寫個程序,一個進程Fork出2000個左右線程就會異常退出了,為什麼?

這個問題的產生是因為windows32位系統,一個進程所能使用的最大虛擬內存為2G,而一個線程的默認線程棧StackSize為1024K(1M),這樣當線程數量逼近2000時,2000*1024K=2G(大約),內存資源就相當於耗盡。

4,默認每線程1MB堆棧的話,只能開2048線程(如果你的其它系統資源足夠的話)。要想開更多線程,只能修改每個線程的堆棧,但實際中是不推薦這樣做的,因為如果你的線程因為一些工作因為線程堆棧不夠的話,會導致整個進程崩潰.修改堆棧的方法好像只在XP或以上系統有效,windows 2000中不支持。

D. 非同步任務類只能在主線程中創建嗎

剛剛接觸非同步socket,想問一下使用socket非同步還用單獨開啟線程嗎?非同步的socket不是每創建一個連接就會自己創建一個線程嗎?非同步socket做伺服器端!請大俠們給講講思路
非同步和多線程可以說沒有必然的聯系,只能說非同步可以通過多線程實現而已
要理解這些東西,你得具備很多相關的知識,操作系統原理,編譯原理等
簡單地來說,計算機或者說CPU執行你的代碼都是順序執行的,當前的語句沒有執行完,不會執行後面的語句的,這是永遠不變的規則!

但是這樣的機制會使整個執行效率很低,因為CPU總是要等待當前的語句執行完畢了才會執行後面的代碼,而計算機在絕多數的時候都是處於等待用戶的輸入,等待磁碟文件的讀取完成,等待網路數據的傳輸完成中,所以為了提高整個系統的運行效率,提高CPU的執行效率,計算機系統引入了非同步的機制。
非同步機制,簡單地說就是CPU不會傻傻地處於等待狀態,它會先干別的事情,當它需要的東西已經准備完畢後(大多數的情況都是等待外部的輸入數據准備完畢,也有些是復雜的計算完畢),硬體系統給CPU一個中斷,告訴有了新的數據了,你現在可以去處理了。

這就是最基本的非同步原理,而現代操作操作系統對硬體系統做了良好的封裝,把很多底層機制屏蔽了,為程序的開發者提供了事件和多線程的概念,讓程序的開發者可以更好地利用非同步機制。

再說說多線程吧。多線程是計算機引入了操作系統之後才有的概念,至於為什麼計算機要引入操作系統,在此就不敘述了,自行了解。多線程的實現有兩個方法,一個就是增加CPU的核數和個數,這是最直接的方法,還有一種是採用CPU輪詢的方式,每個進程都執行一段時間,又去執行另一個進程的指令,由於切換的速度非常的快,給人的感覺就是同時執行的。

說了這么多,你可能很失望,因為沒有代碼,沒有舉例。但我想說的是,用代碼無法說明這個問題,不同的操作系統,不同的編程語言,不同的編程框架,對非同步和多線程的定義和處理是不一樣的,但原理就是這樣的。

我們寫代碼無非就是寫一堆的指令去要求CPU執行,同步的方式就是這樣的:
我:hi,CPU,我要你做一件事情,而且必須立刻馬上就做,因為我正在等著你。
CPU:那你就等著吧,我現在去做。
非同步的方式是這樣的:
我:hi,CPU,我要你做一件事情,但是不是立刻就做,你可以交給下面的人去做,或者找一個幫手來,我們繼續做後面的事情.
CPU:好的,我現在通知硬體去做,等有結果了我通過事件告訴你
或者
CPU:好的,我讓另一個核心來做這件事情,我們繼續(其實多線程是操作系統實現的,我只是這么舉個例子而已)

E. 為什麼在同一進程中創建不同線程,但線程各自的變數

Handler對象在主線程中創建,主線程中的消息隊列由Handler對象來管理。
由於在同一進程中的的線程共享內存,所以子線程可以獲取到主線程中的handler對象。
獲取到handler,通過handle可以把Message插入到主線程消息隊列中。
主線程消息隊列依次把隊列中的Message對象交由主線程處理。

F. 進程中同時可以有多個線程在執行,為了使他們能夠同

定義:
DWORD WINAPI ThreadProc(LPVOIDlpParam);//線程名稱ThreadProc可以是任意的
創建新線程的函數是CreateThread,由這個函數創建的線程將在調用者的虛擬地址空間內執行,函數的用法如下:
HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpsa,//線程的安全屬性
DWORD dwStackSize,//指定線程堆棧的大小
LPTHREAD_START_ROUTINE lpStartAddress,//線程函數的起始地址(執行線程的函數)
LPVOIDlpParameter,//傳給線程函數的參數
DWORD dwCreationFlags,//指定創建線程後是否立即啟動
DWORD* pdwThreadId //取得內核給新生成的線程分配的線程ID號
);
此函數執行成功後,將返回新建線程的線程句柄。pfnThreadProc新建線程將從此地址開始執行,知道return語句返回,線程運行結束,把控制權交給操作系統。

G. 請問能夠實現在UNIX下,一個進程下創建兩個線程的問題

我剛剛寫了個LINUX下多線程的程序,滿足你上面的要求,請參考:

在客戶端創建3個線程A B C,A線程隨機產生一個整數,B線程隨機產生一個大寫字母,C線程隨機產生一個小寫字母。客戶端有3個線程ABC,服務端創建一個線程來接收,接收的內容放在隊列里。在紅旗LINUX下。

H. linux怎樣在進程中創建線程

方法一:PS
在ps命令中,「-T」選項可以開啟線程查看。下面的命令列出了由進程號為<pid>的進程創回建的所有答線程。
$ ps -T -p <pid>

「SID」欄表示線程ID,而「CMD」欄則顯示了線程名稱。

方法二: Top
top命令可以實時顯示各個線程情況。要在top輸出中開啟線程查看,請調用top命令的「-H」選項,該選項會列出所有Linux線程。在top運行時,你也可以通過按「H」鍵將線程查看模式切換為開或關。
$ top -H

I. linux 線程裡面創建線程嗎

1、windows里的進程/線程是繼承自OS/2的。在windows里,"進程"是指一個程序,而"線程"是一個"進程"里的一個執行"線索"。從核心上講,windows的多進程與Linux並無多大的區別,在windows里的線程才相當於Linux的進程,是一個實際正在執行的代碼。但是,windows里同一個進程里各個線程之間是共享數據段的。這才是與Linux的進程最大的不同。2、在windows下,使用CreateThread函數創建線程,與Linux下創建進程同,windows線程不是從創建處開始運行的,而是由CreateThread指定一個函數,線程就從那個函數處開始運行。此程序同前面的UNIX程序一樣,由兩個線程各列印1000條信息。threadID是子線程的線程號,另外,全局變數g是子線程與父線程共享的,這就是與Linux最大的不同之處。大家可以看出,windows的進程/線程要比Linux復雜,在Linux要實現類似windows的線程並不難,只要fork以後,讓子進程調用ThreadProc函數,並且為全局變數開設共享數據區就行了,但在windows下就無法實現類似fork的功能了。所以現在windows下的C語言編譯器所提供的庫函數雖然已經能兼容大多數Linux/UNIX的庫函數,但卻仍無法實現fork。3、對於多任務系統,共享數據區是必要的,但也是一個容易引起混亂的問題,windows下,一個程序員很容易忘記線程之間的數據是共享的這一情況,一個線程修改過一個變數後,另一個線程卻又修改了它,結果引起程序出問題。但在Linux下,由於變數本來並不共享,而由程序員來顯式地指定要共享的數據,使程序變得更清晰與安全。

J. 一個進程可以創建多少個線程

一個進程可來以開啟的線程受可用內源存限制,如果是32位的機器,那麼默認一個進程有2G的可用內存,而每個線程默認分析1M的棧空間,所以這種情況下理論最線程數在2000多個。一個解決辦法是創建線程時減少線程棧的大小或是使用64位的系統。64位系統應該可以忽略這個問題了。當然受cpu及磁碟速度及物理內存的限制。不用到達上限值,你的機器應該已經是慢如牛車了。

閱讀全文

與在線程中可以創造進程嘛相關的資料

熱點內容
浙江省溫州市工商局企業查詢 瀏覽:592
馬鞍山全套多少錢 瀏覽:568
艾丁頓發明了什麼 瀏覽:651
希臘誰創造了人類 瀏覽:415
社區公共衛生服務工作總結 瀏覽:66
學校矛盾糾紛排查化解方案 瀏覽:752
衛生院公共衛生服務績效考核總結 瀏覽:490
郴州學府世家糾紛 瀏覽:197
馬鞍山ok論壇怎麼刪除帖子 瀏覽:242
馬鞍山恆生陽光集團 瀏覽:235
麻城工商局領導成員 瀏覽:52
鄉級公共衛生服務績效考核方案 瀏覽:310
樂聚投訴 瀏覽:523
輪子什麼時候發明 瀏覽:151
馬鞍山陶世宏 瀏覽:16
馬鞍山茂 瀏覽:5
通遼工商局咨詢電話 瀏覽:304
誰發明的糍粑 瀏覽:430
國家公共文化服務示範區 瀏覽:646
pdf設置有效期 瀏覽:634