當前位置:首頁 » 編程語言 » java多進程

java多進程

發布時間: 2025-08-23 16:16:18

java單多線程求pair值演算法比較

進程和線程的概念

什麼是進程

一個進程就是在一個運行的程序 它有自己獨立的內存空間 一組系統資源 每個進程的內部數據和狀態都是獨立的 例如在window是同時打開多個記事本 雖然它們所運行的程序代碼都是一樣的 但是所使用的內存空間是獨立的 互不幹擾

什麼是線程

線程與進程相似 是一段完成某個特定功能的代碼 是程序中單個順序的流控制;但與進程不同的是 同類的多個線程共享一塊內存空間和一組系統資源 而線程本身的數據通常只有微處理器的寄存器數據 以及一個供程序執行時使用的堆棧

進程與線程的區別

進程:每個進程都有獨立的代碼和數據空間(進程上下文) 進程切換的開銷大

線程:輕量的進程 同一類線程共享代碼和數據空間 每個線程有獨立的運行棧和程序計數器(PC) 線程切換的開銷小

多進程:在操作系統中 能同時運行多個任務程序

多線程:在同一應用程序中 有多個順序流同時執行

線程創豎態梁建的兩種方式

採用繼承Thread類創建線程

該方法比較簡單 主要是通過繼承java lang Thread類 並覆蓋Thread類的run()方法來完成線成的創建 Thread 類是一個具體的閉悄類 即不是抽象類 該類封裝了線程的行為 要創建一個線程 程序員必須創建一個從 Thread 類導出的新類 Thread類中有兩個最重要的函數run()和start()

通過實現Runnable介面創建線程

該方法通過生成實現java lang Runnable介面的類 該介面只定義了一個方法run() 所以必須余運在新類中實現它 但是 Runnable 介面並沒有任何對線程的支持 我們還必須創建 Thread 類的實例 這一點通過 Thread 類的構造函數

public Thread(Runnable target);來實現

單線程和多線程性能比較

以使用蒙特卡羅概率演算法求π為例 進行單線程和多線程時間比較

什麼是蒙特卡羅概率演算法

蒙特卡羅法(Monte Carlo method)是以概率和統計的理論 方法為基礎的一種計算方法 將所求解的問題同一定的概率模型相聯系 用電子計算機實現統計模擬或抽樣 以獲得問題的近似解 故又稱統計模擬法或統計試驗法 網路

蒙特卡羅求演算法求π

第一步

畫正方形和內切圓

第二步

變換表達式

正方形面積As=( R)^

圓的面積Ac=πR^

Ac/As=( R)^ /πR^

π= As/Ac

令P=As/Sc 則π= P

第三步

重復N次實驗求平均值

在正方形區域內隨機生成一個點A 若A落在圓區域內 M++

P=M/N

π= P N的取值越大 π的值越精確

java代碼實現演算法

N取值為 萬 多線程的數為 每個線程執行 萬次模擬實驗

線程實現

import ncurrent CountDownLatch;

public class ProModel implements Runnable {

public int N;//隨機實驗的總次數

public static int M;//隨機點落在圓中的次數

private int id;

private final CountDownLatch doneSignal;

OBJ semaphore;

public ProModel(int id CountDownLatch doneSignal int N OBJ semaphore ){

this id=id;

this doneSignal=doneSignal;

this N=N;

this semaphore=semaphore ;

M= ;

}

public void run(){

int tempM= ;

for(int i= ;i<N;i++){

if(isInCircle()){

tempM++;

}

}

synchronized (semaphore) {

add(tempM);

}

untDown();//使end狀態減

}

public void add(int tempM){

System out println(Thread currentThread() getName());

M=M+tempM;

System out println(M);

}

//隨機產生一個在正方形區域的點 判斷它是否在圓中

public boolean isInCircle(){

double x=Math random();

double y=Math random();

if((x )*(x )+(y )*(y )< )

return true;

else

return false;

}

public static int getTotal(){

return M;

}

}

多線程Main實現

import ncurrent CountDownLatch;

import ncurrent ExecutorService;

import ncurrent Executors;

public class MutliThread {

public static void main(String[] args) throws InterruptedException {

long begin=System currentTimeMillis();

int threadSize= ;

int N= ;

OBJ semaphore = new OBJ();

CountDownLatch doneSignal = new CountDownLatch(threadSize);

ProModel[] pros=new ProModel[threadSize];

//設置特定的線程池 大小為threadSizde

System out println( begins! );

ExecutorService exe = Executors newFixedThreadPool(threadSize);

for(int i= ;i<threadSize;i++)

exe execute(new ProModel(i+ doneSignal N semaphore));

try{

doneSignal await(); //等待end狀態變為 }catch (InterruptedException e) {

// TODO: handle exception

e printStackTrace();

}finally{

System out println( ends! );

System out println( *(float)ProModel getTotal()/(float)(threadSize*N));

}

exe shutdown();

long end=System currentTimeMillis();

System out println( used time(ms): +(end begin));

}

}

class OBJ{}

單線程Main實現

import ncurrent CountDownLatch;

import ncurrent ExecutorService;

import ncurrent Executors;

public class SingleThread {

public static void main(String[] args) {

long begin=System currentTimeMillis();

int threadSize= ;

int N= ;

OBJ semaphore = new OBJ();

CountDownLatch doneSignal = new CountDownLatch(threadSize);

ProModel[] pros=new ProModel[threadSize];

//設置特定的線程池 大小為

System out println( begins! );

ExecutorService exe = Executors newFixedThreadPool(threadSize);

for(int i= ;i<threadSize;i++)

exe execute(new ProModel(i+ doneSignal N semaphore));

try{

doneSignal await(); //等待end狀態變為 }catch (InterruptedException e) {

// TODO: handle exception

e printStackTrace();

}finally{

System out println( ends! );

System out println( *(float)ProModel getTotal()/(float)(threadSize*N));

}

exe shutdown();

long end=System currentTimeMillis();

System out println( used time(ms): +(end begin));

}

}

運行結果比較

lishixin/Article/program/Java/gj/201311/27648

php和java的主要區別有哪些

PHP和Java的主要區別包括以下幾點:

  1. 運行機制

    • PHP:具有opcache機制,能夠緩存opcode,並支持JIT編譯優化,運行時通過解釋執行。
    • Java:運行時通過解釋執行,並使用HotSpot機制進行JIT編譯以提高性能。
  2. 庫函數實現

    • PHP:庫函數多用C實現。
    • Java:核心類庫用Java編寫,應用運行時需解釋執行用戶代碼及類庫。
  3. 模板引擎與內置功能

    • PHP:自帶模板引擎,內置HTTP伺服器和sqlite資料庫
    • Java:Web開發通常需要JSP容器或第三方模板引擎,多依賴第三方Servlet容器如Tomcat。
  4. 並發實現

    • PHP:PHPFPM採用多進程架構,支持進程池隔離,也能支持多線程模式。
    • Java:依賴多線程實現並發。
  5. 內存管理

    • PHP:PHPFPM與Apache MOD_PHP常駐內存,資源釋放徹底,內存管理由系統自動處理,PHPFPM能夠自動管理崩潰的worker進程。
    • Java:多線程編程需要開發者參與錯誤處理,否則可能導致JVM崩潰。
  6. 部署與熱部署

    • PHP:支持熱部署,依賴FTP上傳即可實現代碼更新。
    • Java:實現熱部署較困難。
  7. 數據共享與持久連接

    • PHP:天然支持跨進程數據共享,通過session、Yac或SQLite實現。支持持久連接,多個請求可以復用一個資料庫連接。
    • Java:程序共享數據依賴JVM內存。
  8. 開發框架與應用類型

    • PHP:更側重於快速開發框架,適合開發I/O密集型應用。
    • Java:提供更完整的類庫與面向對象編程支持,在計算密集型應用上具有優勢。
  9. SAPI類型與並發管理

    • PHP:支持多種SAPI,提供豐富的並發與內存管理選項,可滿足不同應用場景需求。

這些區別使得PHP和Java在各自擅長的領域里都有廣泛的應用。PHP以其快速開發和靈活性在Web開發領域占據一席之地,而Java則以其強大的企業級特性和面向對象編程支持在計算密集型應用及大型系統中表現出色。

python代碼for循環部分,可以做出想java一樣多進程的呢,因為數據量比較大,跑的時間有點長了

frommultiprocessingimportPool

fp2=open("C:\b.csv",'w')
fp2.write('ab'' ')

defprocess_line(line):
line=line.rstrip().lstrip('"').rstrip('"')
print("checkingMD5"+line)
return_code=getResult(line)
ifreturn_code==1:
fp2.write(line+' ')

if__name__=="__main__":
pool=Pool(4)
withopen('C:\a.txt')assource_file:
#
pool.map(process_line,source_file,4)

試試這個。

㈣ php和java的主要區別有哪些

PHP與Java的主要區別體現在運行機制、庫函數實現、模板引擎、資料庫支持、並發實現、內存管理、部署方式、數據共享與持久連接、開發框架、大型應用支持、熱部署、資料庫訪問速度、持久連接設置、進程間數據共享、GC機制與內存管理、SAPI類型、HTTP伺服器功能、JIT支持與應用優化、並發性能、內存佔用與穩定性、部署便利性、對象編程方式、大型應用適應性與性能需求。

PHP具有opcache機制,能夠緩存opcode,支持JIT編譯優化。Java則在運行時通過解釋執行,使用HotSpot機制進行JIT編譯,以提高性能。PHP的庫函數多用C實現,Java的核心類庫用Java編寫,應用運行時需解釋執行用戶代碼及類庫。

PHP自帶模板引擎,而Java Web開發通常需要JSP容器或第三方模板引擎。PHP內置HTTP伺服器和SQLite資料庫,而Java Web開發則多依賴第三方Servlet容器如Tomcat。

PHP-FPM採用多進程架構,支持進程池隔離,PHP-FPM與Nginx類似,能夠有效利用多核並發處理。Java則依賴多線程實現並發。PHP支持多線程模式,如Apache的event MPM和Facebook的HHVM。

PHP-FPM與Apache MOD_PHP常駐內存,資源釋放徹底,內存管理由系統自動處理,PHP-FPM能夠自動管理崩潰的worker進程。Java多線程編程需要開發者參與錯誤處理,否則可能導致JVM崩潰。

PHP支持熱部署,依賴FTP上傳即可實現代碼更新,而Java實現熱部署較困難。PHP天然支持跨進程數據共享,通過session、Yac或SQLite實現。Java程序共享數據依賴JVM內存。

PHP的資料庫驅動如mysqlnd等性能與Java的JDBC驅動相當,支持持久連接,多個請求復用一個連接,無需頻繁打開資料庫連接。PHP與Java性能相當,適用於大多數Web應用,尤其是I/O密集型應用。

PHP與Java共同誕生於1995年,兩者功能與特點各具優勢。PHP更側重於快速開發框架,Java則提供更完整的類庫與面向對象編程支持。PHP適合開發I/O密集型應用,Java在計算密集型應用上具有優勢。

PHP支持多種SAPI,如php-cgi、php-fpm/hhvm、libphp7.so等,提供豐富的並發與內存管理選項,可滿足不同應用場景需求。PHP-FPM與Apache MOD_PHP的常駐內存與資源管理機制確保了高效穩定的服務運行。

JIT(即時編譯)機制在計算密集型應用中表現出色,但Web應用多為I/O密集型,編譯型語言的性能優勢在此類應用中並不顯著。PHP-FPM的內存佔用與穩定性在實際應用中得到了驗證,支持持久連接的配置,無需額外依賴。

熱點內容
nc程序編譯原理 發布:2025-08-23 20:15:05 瀏覽:511
安卓12哪個廠家最先適配 發布:2025-08-23 20:00:31 瀏覽:365
檢測加星數量腳本 發布:2025-08-23 20:00:30 瀏覽:740
sql2005aspnet 發布:2025-08-23 19:57:07 瀏覽:965
c語言for循環執行順序 發布:2025-08-23 19:57:00 瀏覽:261
視頻分鏡頭腳本簡單 發布:2025-08-23 19:56:59 瀏覽:829
c語言程序設計實驗教程課後答案 發布:2025-08-23 19:30:14 瀏覽:333
手機軟體的腳本怎麼運行 發布:2025-08-23 19:26:22 瀏覽:556
lg安卓9怎麼切換3g 發布:2025-08-23 19:22:55 瀏覽:49
線割編程軟體 發布:2025-08-23 19:06:41 瀏覽:53