چرا پایتون اجازه اجرای موازی بین thread ها را نمیده؟ سرعت اجرا در حالت موازی خیلی بهتر از همروندی است. چرا در پایتون برنامه نویسی موازی را نداریم و باعث شده سرعت اجراش کمتر بشه؟
1 پاسخ
یک برنامه پایتونی که مینویسیم در سیستم عامل تبدیل به یک پروسه میشه که میتونیم براش چندین thread بسازیم.
پایتون به گونه ای نوشته شده که اجازه نمیده دو تا thread از یک برنامه به صورت موازی با هم اجرا بشوند. مثلا طبق شکل زیر امکان ندارد thread شماره یک و سه از یک برنامه پایتونی باشند.
برای اطلاعات بیشتر در مورد نحوه کار برنامه نویسی موازی و همروندی به این لینک مراجعه کنید.
پایتون تنها اجازه میده که thread ها به صورت همروندی اجرا بشوند.
برنامه نویسی موازی رو سرعت خیلی تاثیر داره و میشه گفت از نظر تئوری سرعت را دو برابر میکنه
در حالی که برای اجرا به صورت همروندی چون دائما بین threadها سوییچ میکنیم سرعت کمتر، حتی ممکنه اگر با یه thread برنامه را اجرا کنیم سرعت بهتر از حالت همروندی باشه چون یه زمانی را صرف سوییچ کردن میکنیم.
چیزی که باعث میشه پایتون امکان موازی اجرا شدن چندین thread را نمیده به خاطر وجود چیزی به اسم global interpreter lock یا GIL است.
در نسخه استاندارد پایتون که به زبان c نوشته شده و به آن cpython گفته میشه GIL وجود دارد.
در واقع GIL مثل یک قفل میمونه که اجازه نمیده دو یا چند تا thread به صورت موازی با هم اجرا بشوند. در هر نقطه از زمان اجرا، قفل GIL مطمئن میشه که فقط یک thread در حال اجرا است و هیچ اجرای موازی وجود ندارد.
اطلاعات کاملتر در این لینک