nproc
batas yang Anda bicarakan berlaku untuk entitas yang dapat dijalankan , dengan demikian membatasi utas (dan karenanya, proses yang memuatnya) . Setiap proses memiliki setidaknya satu utas (utas utama), sehingga hanya utas yang dapat dijalankan . Sebenarnya, proses tidak "dapat dijalankan".
Jawaban ini menjelaskan perbedaan nyata antara utas dan proses di Linux.
Saya menguji kode di daya jawaban (juga menambahkan sleep(1);
dalam kode utas) dan tidak seperti dia (?!), saya mencapai batas ketika terlalu banyak utas dibuat:pthread_create()
mengembalikan EAGAIN
. pthread_create(3)
dokumentasi mengatakan hal berikut tentang kesalahan ini:
LAGI
Sumber daya tidak mencukupi untuk membuat utas lain, atau batas yang diberlakukan sistem pada jumlah utas ditemukan. Kasus terakhir dapat terjadi dalam dua cara:batas sumber daya lunak RLIMIT_NPROC (set viasetrlimit(2)), yang membatasi jumlah proses untuk ID pengguna nyata, tercapai; atau batas seluruh sistem kernel pada jumlah utas, /proc/sys/kernel/threads-max, telah tercapai.
Saya tidak melihat penyebutan spesifik batas per-utas di sumber kernel, saya hanya melihat RLIMIT_NPROC
di sana, yang merupakan batas yang dapat Anda ubah di limits.conf
(dengan nproc
), ulimit -u
atau setrlimit(2)
.