走向並行系列之-使用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。
相關文章
- 在LINUX下編寫程式並執行Linux
- 使用 C++11 編寫 Linux 多執行緒程式C++Linux執行緒
- 使用 C++ 11 編寫 Linux 多執行緒程式C++Linux執行緒
- Unix系列shell程式編寫
- Perl 多執行緒模組 Parallel::ForkManager執行緒Parallel
- Unix系列shell程式編寫:下篇
- Unix系列shell程式編寫:中篇
- Unix系列shell程式編寫:上篇
- PHP多程式並行執行php指令碼PHP並行指令碼
- 用VB編寫非同步多執行緒下載程式 (轉)非同步執行緒
- 【python隨筆】之【多程式並行統計多個cvs檔案行數】Python並行
- Storm系列(三)java編寫第個storm程式ORMJava
- 只需 5 分鐘,教你如何編寫並執行一個 Rust + WebAssembly 程式RustWeb
- python多程式檢查埠並寫日誌Python
- Android多程式之手動編寫Binder類Android
- 編寫多執行緒應用程式,模擬多個人通過一個山洞:執行緒
- 尋找寫程式碼感覺(三)之使用 Spring Boot 編寫介面Spring Boot
- 使用 xunit 編寫測試程式碼
- 使用Python編寫猜拳小程式Python
- 使用JavaScript編寫的爬蟲程式JavaScript爬蟲
- 使用 intern 編寫測試程式碼
- 【瞎寫程式碼】系列之redux表面理解Redux
- 使用Python編寫一個多執行緒的12306搶票程式Python執行緒
- Pycharm連線遠端伺服器並編寫、執行python程式碼PyCharm伺服器Python
- python如何換行編寫程式碼Python
- 編寫程式/執行緒監視器執行緒
- Python並行程式設計(七):多程式的基本使用和與多執行緒的差異Python並行行程程式設計執行緒
- Java程式編寫Java
- [原始碼解析] 並行分散式任務佇列 Celery 之 多程式模型原始碼並行分散式佇列模型
- Python如何使用tkinter編寫GUI程式PythonGUI
- 使用 Source Generators 快速編寫 MVVM 程式碼MVVM
- windows下如何使用QT編寫dll程式WindowsQT
- iOS多執行緒程式設計之NSThread的使用iOS執行緒程式設計thread
- C#多執行緒(四)並行程式設計篇之結構化C#執行緒並行行程程式設計
- 在no_ui中使用多程式實現多賬戶並行執行,並分配各自獨立的工作環境和策略UI並行
- 在Windows下編寫並執行第一個ASP.NET 5 Preview Web API程式WindowsASP.NETViewWebAPI
- Python編寫守護程式程式Python
- Android多程式之Binder的使用Android