2009-12-22 9 views
11

क्या प्रक्रिया किसी भी प्रकार की पाथ्रेड की संख्या पर सीमा को बदलने के किसी भी माध्यम से संभव है? वर्तमान में मेरे लिनक्स सिस्टम पर मैं लगभग 380 धागे बना सकता हूं लेकिन मैं इसे तब तक बढ़ाना चाहता हूं जब तक कि स्मृति उपलब्ध न हो। इस परकिसी अनुप्रयोग द्वारा pthreads की अधिकतम संख्या की सीमा को बदलना

+2

दिलचस्प ... आप इस तरह के कुछ आशयों को माना जाता है प्रणाली की रूपरेखा? विफलता का एकल बिंदु (एसपीओएफ) दिमाग में आता है। – jldupont

+0

मैं कोई विशेषज्ञ नहीं हूं, लेकिन मैं शर्त लगाता हूं कि 380 से अधिक धागे आपके प्रोसेसर को संदर्भ स्विच के साथ अभिभूत करेंगे। एक थ्रेड के लिए संदर्भ स्विचिंग एक अलग प्रक्रिया के लिए कम है, लेकिन आपको अभी भी प्रोग्राम काउंटर को सहेजना होगा और फाइल को पंजीकृत करना होगा और शायद कुछ अन्य चीजें जिन्हें मैं भूल रहा हूं। आपको लगता है कि आपको कितने धागे चाहिए? मैं 100 थ्रेड बनाम 10 धागे के लिए थ्रेड ओवरहेड निर्धारित करने के लिए अपने आवेदन को प्रोफाइलिंग करने का सुझाव दूंगा और फिर अपने लक्ष्य संख्याओं को निकालने का प्रयास करूंगा। आप पाते हैं कि यह प्रयास के लायक नहीं है। या शायद मैं सिर्फ गलत हूं ... –

+0

मैं इसे व्यावहारिक रूप से कहीं भी उपयोग नहीं करूँगा ... लेकिन मुझे कुछ प्रयोगों के लिए इसकी आवश्यकता है? – Sukanto

उत्तर

1

देखो:

Maximum number of threads per process in Linux?

और इस पर एक नज़र के रूप में यह अपने प्रश्न से संबंधित हो सकता है:

Serve one client with each server thread

+0

' बिल्ली?/proc/sys/kernel/threads-max' दिखाता है '16384'। लेकिन मैं 380 से अधिक pthreads नहीं बना सकता। मैंने धागे के शरीर के रूप में एक खाली कार्य डालने का भी प्रयास किया। – Sukanto

+0

आपको क्या त्रुटि मिलती है? –

+0

380 धागे के बाद मुझे 'eAGAIN'' pthread_create() 'के रिटर्न मान के रूप में मिलता है, जो 'pthread_create()' मैन पेज के अनुसार है" सिस्टम में एक और थ्रेड बनाने के लिए आवश्यक संसाधनों की कमी है, या सिस्टम पर लगाए गए सीमा किसी प्रक्रिया में थ्रेड की कुल संख्या {PTHREAD_THREADS_MAX} पार हो जाएगी। " – Sukanto

3

आपकी समस्या यह है कि आप pthread_detach पर बुलाया नहीं किया है प्रश्न में धागे। यह बताता है कि थ्रेड समाप्त होने पर प्रत्येक थ्रेड से जुड़े संसाधन जारी किए जाएंगे। थ्रेड संसाधनों को जारी करने के लिए आपको सभी धागे पर pthread_join या pthread_release को कॉल करना होगा। इसका मतलब है कि आपको अपने pthread_join रद्दीकरण हैंडलर या रिसाव में pthread_detach को भी कॉल करना होगा।

6

उपयोगकर्ता के ढेर आकार को कम करें 'ulimit -s 1024';

default: 8MB 
reduced: 1MB 

धागे की संख्या बढ़ाने के लिए। pthread_attr_setstacksize(1024)

2
cat /proc/sys/kernel/threads-max 

लिनक्स में काम कर सकते हैं लेकिन अन्य यूनिक्स प्रणालियों:

ढेर आकार सेट। मैंने सोचा था कि सही तरीके से

Maximum number of threads per process - sysconf(_SC_THREAD_THREADS_MAX) failing

जो (HPUX) की तरह कुछ यूनिक्स सिस्टम पर काम करता है लेकिन सोलारिस या लिनक्स पर नहीं ... है

संबंधित मुद्दे