मुझे सी में थ्रेड में अपने पहले प्रयास में कुछ परेशानी हो रही है। मैं एक बहुत ही सरल सर्वर प्रोग्राम लिखने की कोशिश कर रहा हूं जो सॉकेट कनेक्शन स्वीकार करता है और इसे संसाधित करने के लिए एक नया धागा शुरू करता है। ऐसा लगता है कि यह ठीक काम करता है सिवाय इसके कि यह केवल 300 थ्रेड (303, कभी-कभी 304) बनायेगा, इससे पहले कि pthread_create() EAGAIN कोड के साथ विफल हो जाता है, जिसका अर्थ है:क्यों pthread_create() केवल 2 धागे सक्रिय के साथ विफल होगा?
"सिस्टम में एक और धागा बनाने के लिए आवश्यक संसाधनों की कमी थी, या किसी प्रक्रिया में थ्रेड की कुल संख्या पर सिस्टम-लगाया गया सीमा {PTHREAD_THREADS_MAX} पार हो जाएगी। "
यह 303 धागे एक ही समय में नहीं है - प्रत्येक धागा जीडीबी द्वारा पुष्टि की जाती है। प्रत्येक बार प्रक्रिया अनुरोध फ़ंक्शन को बुलाया जाता है, वहां दो धागे चलते हैं।
तो इसका मतलब है कि "सिस्टम में आवश्यक संसाधनों की कमी है"। मेरा सवाल है (और यह थोड़ा बेवकूफ हो सकता है) - ये संसाधन क्या हैं? संभवतः यह मेरे कार्यक्रम में एक स्मृति रिसाव है (निश्चित रूप से संभव है, यहां तक कि संभवतः), लेकिन मैंने सोचा होगा कि यह भी 300 से अधिक प्रबंधन कर सकता है क्योंकि शेष कार्यक्रम बहुत कम करता है।
मैं यह कैसे पता लगा सकता हूं कि यह प्रोग्राम यह सुनिश्चित करने के लिए कितना मेमोरी उपलब्ध है कि यह उससे बाहर हो रहा है? बहुत सारी मेमोरी है और स्वैप मुफ्त है इसलिए संभवतः ओएस (लिनक्स) द्वारा लगाई गई कृत्रिम सीमा है।
धन्यवाद
आप पोस्ट कर सकते हैं कोड स्निपेट जो धागे बनाता है और नष्ट करता है? –