關於Perl自己的數據結構,Perl中的fork()
的開銷是多少? 1)代碼的大小(語法樹)和2)變量/引用中的數據量是否會影響花在分叉上的時間量?數據量和代碼在Perl中如何影響fork()性能?
回答
分叉創建整個過程的獨立副本 - 代碼和數據 - 除I/O句柄之外的所有內容。因此,增加程序內存佔用量的任何事情(在邊緣)都會使fork操作花費更長時間。
對於處理大量數據和多個子進程的程序,需要考慮的一件事是使父進程的佔用空間儘可能小,並在子進程啓動後加載數據。
不是Perl的問題,因爲fork
是系統調用。這個過程是否是Perl並不重要,它總是做同樣的事情。它並不關心進程的內部部分,只有總內存大小有效。
現代操作系統如Linux實現COW,所以fork
通常返回非常快,對於每個進程幾乎相同。
Perl中的'fork'是函數,它反過來會調用'fork'系統調用。沒有任何東西可以阻止Perl在其周圍進行一些預處理/後處理,例如,它可以處理其他系統設施,例如信號。 –
而前/後處理是...... [沒有什麼相關的,真的](http://perl5.git.perl.org/perl.git/blob/HEAD:/pp_sys.c#l4026)。 – daxim
fork
本身不使用存儲器。父進程的內存頁面與子進程共享,直到子進程嘗試寫入共享頁面爲止,此時創建頁面的副本,以便每個進程都擁有自己的頁面副本。
如果代碼和只讀數據與可寫數據分離,則會導致許多頁面始終被共享。
但是,在Perl中沒有代碼和數據的分離。操作碼不僅與數據在同一個內存池中創建,操作碼具有可寫組件!這意味着一個分岔的孩子通常最終最終會被分享,我想。
要知道,當你的進程正在運行時,你必須挖掘出ps
。
正如其他人所說的那樣,簡短的回答是,代碼/數據量對性能的影響超出了系統實現所普遍暗示的性能。
但是,在調用fork,per the documentation之前,perl本身會刷新打開的文件句柄。所以,是的,打開的perl文件句柄的數量對fork()性能有一定的影響。
(螺紋perl的建立也將我的系統上拋出內部互斥鎖保護的內存分配,至少在5.16小,像內部同步可能會有所不同,從系統到系統,並從Perl的版本Perl版本。)
- 1. dispatch_async影響代碼後續的性能?
- 2. innodb_log_file_size如何影響性能?
- 3. estimatedRowHeight如何影響性能?
- 4. 目錄中的文件數量如何影響性能?
- 5. 如何衡量我的代碼性能和數據庫性能PHP
- 6. 實施軟刪除,對性能和代碼影響最小
- 7. 指針和性能影響?
- 8. NULL值如何影響數據庫搜索中的性能?
- 9. 性能影響
- 10. Oracle數據泵會影響性能嗎?
- 11. <cfqueryparam>如何影響常量和空值的性能?
- 12. 在MySQL中,確實在一個表中的數據量會影響性能
- 13. 如何影響Rails應用程序性能的寶石數量?
- 14. C/C++標籤數量(goto)如何影響性能?
- 15. 並行進程的數量將如何影響CPU的性能?
- 16. 文件中代碼的位置是否會影響其性能?
- 17. 浮點數和int數據類型影響性能
- 18. 批量大小如何影響批量插入性能?
- 19. 性能和內存對組裝數量的影響
- 20. 影響JOIN在性能
- 21. 數據庫連接池如何影響性能?
- 22. mysql/innodb數據庫大小如何影響性能?
- 23. LINQ性能影響
- 24. 性能的影響
- 25. 投影數量對查詢性能的影響
- 26. 變量是否會影響性能?
- 27. 複製php變量的性能影響
- 28. PooledCloseableHttpClient影響性能吞吐量
- 29. 會話變量的性能影響PHP
- 30. 大型變量表的性能影響
在fork()之後,I/O句柄由兩個進程保持打開狀態。 –