走向並行系列之-使用ForkManager編寫多程式程式
ForkManager下載地址:
http://search.cpan.org/~dlux/Parallel-ForkManager-0.7.5/ForkManager.pm
fork函式建立程式
關於使用fork建立程式網上有很多優秀的例項,這裡貼上一例,演示新怎樣建立一個新的程式:http://fuzhong1983.blog.163.com/blog/static/1684705201112405432663/
------------------------------------------
下面一段程式的作用是每隔1s建立一個新的程式,每個新建立的程式的作用是sleep(5)
use strict;use warnings;
for (my $i = 0; $i < 10; $i ++) {
## ==建立一個新的程式 ==
my $pid = fork();
#如果建立失敗,退出程式(ps:搞不明白,既然建立了,還能失敗)
if (!defined($pid)) {
print "Error in fork: $!";
exit 1;
}
if ($pid == 0) {
## == child proc ==
print "Child $i : My pid = $$n";
sleep(5);
print "Child $i : endn";
exit 0;
}
sleep(1);
}
exit 0;
關於程式的收割以及程式數量的控制,這裡就不詳述了。因為下面將要介紹一種更簡單的控制程式的方法。
使用ForkManager建立並控制執行緒
先上例項,一句一句分析;
use Parallel::ForkManager; #申明模組;
use strict;use warnings;
my $MAX_PROCESSES=10; #申明最大程式數(一次建立的程式越多,越耗記憶體);
my $pm = new Parallel::ForkManager($MAX_PROCESSES); #建立一個例項;
#共有50個任務需要處理,系統中始終保持處理的程式數為10;
for(my $i=1;$i<=50;$i++){
#建立一個新進,使用next語句,進入下一個迴圈。每個程式的任務就是呼叫SLEEP函式
#當建立的程式數達到設定的閾值(10)時,主程式等待,知道有子程式執行完畢,新的程式將被建立;
my $pid = $pm->start and next;
&SLEEP;
$pm->finish; #收割程式;
}
$pm->wait_all_children; #不知道為什麼會有這句,但是是必須的;
sub SLEEP
{ sleep(5);
}
使用ForkManager建立程式,算是比較省心的了,我們不用管怎麼來控制程式數量,怎麼等待程式結束然後收割程式。當每個程式執行時間不一致時,ForkManager控制新建的程式逐一新增,最大化利用CPU。
http://search.cpan.org/~dlux/Parallel-ForkManager-0.7.5/ForkManager.pm
fork函式建立程式
關於使用fork建立程式網上有很多優秀的例項,這裡貼上一例,演示新怎樣建立一個新的程式:http://fuzhong1983.blog.163.com/blog/static/1684705201112405432663/
------------------------------------------
下面一段程式的作用是每隔1s建立一個新的程式,每個新建立的程式的作用是sleep(5)
use strict;use warnings;
for (my $i = 0; $i < 10; $i ++) {
## ==建立一個新的程式 ==
my $pid = fork();
#如果建立失敗,退出程式(ps:搞不明白,既然建立了,還能失敗)
if (!defined($pid)) {
print "Error in fork: $!";
exit 1;
}
if ($pid == 0) {
## == child proc ==
print "Child $i : My pid = $$n";
sleep(5);
print "Child $i : endn";
exit 0;
}
sleep(1);
}
exit 0;
關於程式的收割以及程式數量的控制,這裡就不詳述了。因為下面將要介紹一種更簡單的控制程式的方法。
使用ForkManager建立並控制執行緒
先上例項,一句一句分析;
use Parallel::ForkManager; #申明模組;
use strict;use warnings;
my $MAX_PROCESSES=10; #申明最大程式數(一次建立的程式越多,越耗記憶體);
my $pm = new Parallel::ForkManager($MAX_PROCESSES); #建立一個例項;
#共有50個任務需要處理,系統中始終保持處理的程式數為10;
for(my $i=1;$i<=50;$i++){
#建立一個新進,使用next語句,進入下一個迴圈。每個程式的任務就是呼叫SLEEP函式
#當建立的程式數達到設定的閾值(10)時,主程式等待,知道有子程式執行完畢,新的程式將被建立;
my $pid = $pm->start and next;
&SLEEP;
$pm->finish; #收割程式;
}
$pm->wait_all_children; #不知道為什麼會有這句,但是是必須的;
sub SLEEP
{ sleep(5);
}
使用ForkManager建立程式,算是比較省心的了,我們不用管怎麼來控制程式數量,怎麼等待程式結束然後收割程式。當每個程式執行時間不一致時,ForkManager控制新建的程式逐一新增,最大化利用CPU。
相關文章
- 使用Python編寫一個多執行緒的12306搶票程式Python執行緒
- 【python隨筆】之【多程式並行統計多個cvs檔案行數】Python並行
- 使用Python編寫猜拳小程式Python
- Android多程式之手動編寫Binder類Android
- 尋找寫程式碼感覺(三)之使用 Spring Boot 編寫介面Spring Boot
- python如何換行編寫程式碼Python
- Storm系列(三)java編寫第個storm程式ORMJava
- 只需 5 分鐘,教你如何編寫並執行一個 Rust + WebAssembly 程式RustWeb
- Pycharm連線遠端伺服器並編寫、執行python程式碼PyCharm伺服器Python
- Pytorch:單卡多程式並行訓練PyTorch並行
- Python並行程式設計(七):多程式的基本使用和與多執行緒的差異Python並行行程程式設計執行緒
- 使用JavaScript編寫的爬蟲程式JavaScript爬蟲
- Python如何使用tkinter編寫GUI程式PythonGUI
- 使用 xunit 編寫測試程式碼
- 【瞎寫程式碼】系列之redux表面理解Redux
- 在VS2019使用MASM編寫彙編程式ASM
- Java程式編寫Java
- Python編寫守護程式程式Python
- Android多程式之Binder的使用Android
- Android多程式之Messenger的使用AndroidMessenger
- Android 多程式之Messenger的使用AndroidMessenger
- 使用 Source Generators 快速編寫 MVVM 程式碼MVVM
- 使用pycharm or vscode來編寫python程式碼?PyCharmVSCodePython
- [原始碼解析] 並行分散式任務佇列 Celery 之 多程式模型原始碼並行分散式佇列模型
- 12C開始oracle實現了SCALABLE LGWR多程式並行寫redo logOracle並行
- 使用 Typhoeus 和 Ruby 編寫的爬蟲程式爬蟲
- 使用 F# 編寫檔案處理程式
- 使用 Vyper 編寫簡易文字識別程式
- C#多執行緒(四)並行程式設計篇之結構化C#執行緒並行行程程式設計
- 幽默:編寫Python程式碼你們使用什麼偵錯程式?Python
- 在no_ui中使用多程式實現多賬戶並行執行,並分配各自獨立的工作環境和策略UI並行
- 【瞎寫程式碼】系列之表面小演算法演算法
- ekzhang/rustpad:使用Rust編寫的高效程式碼編輯器Rust
- 編寫執行緒安全的JSP應用程式執行緒JS
- Sublime 編寫編譯 swift程式碼編譯Swift
- IO 模型 select 編寫多程式 Web 伺服器 PHP 版模型Web伺服器PHP
- 如何使用 Laravel Collections 類編寫神級程式碼Laravel
- 編寫一個使用wreq庫的爬蟲程式爬蟲
- 使用rust編寫dwm status-bar應用程式Rust