سلام من این کدو نوشتم تا زمان اجرای هر thread رو ببینم، بر خلاف تصور هر اجرای thread دقیقا یک ثانیه بعد انجام نمیشه و گاهیی بیشتر از 1 و گاهی کمتر از 1 ثانیه طول میکشه،
کسی میدونه چرا؟
import threading
import time
i=0
def task():
global t_period
t_period1 = time.time() - t_period
t_period = time.time()
t=threading.Timer(1,task)
t.start()
print( t_period1 )
t_period = time.time()
t=threading.Timer(1,task)
t.start()
رشتهٔ گفتگو سلام من این کدو نوشتم تا زمان اجرای هر thread رو ببینم، بر خلاف تصور هر اجرای thread دقیقا یک ثانیه بعد انجام نمیشه و گا…
9 پیام · –M Z M پایتون یک مکانیزم برای مدیریت حافظه داره به اسم Global interpreter lock یا GIL این گیل یک نوع قفل هست و نمیذاره همزمان دو تا ثرد به آبجکتهای پایتون در مموری دسترسی داشته باشن برای همین هر ثرد که میخواد اجرا بشه گیل رو میگیره دستش (acquire) و بعدش ولش میکنه release این کار هزینهبر هست و خوبیها و بدیهای خودش رو دارهZ
ح ببین وقتی اون thread تو دست میذاره رو یجای حافطه که ازش variable رو بخونه. اونجا رو قفل میکنه سیستم تا باعث مشکلات بیشتری نشه. اگه اینکارو نکنه و دو thread باهم یه مقداری رو تغییر بدن کار بهم مخوره مثلا thread اول مقدار ۵ رو میخونه همزمان thread دوم هم نقدار ۵ رو از حافظع میخونه حالا تو مرحله بعد اولی ۲ تا اضافه میکنه بهش.. مقدارش میشه ۷ حالا ۷ رو میذاره توی اون variable همینجا دومی همزمان ۳ تا از اون عدد ۵ ای که خونده بود کم میکنه و میشه ۲ حالا ۲ رو میذاره توی اونجای حافظه و اینجا کاملا اون مقداری که اولی نوشته بود و رونویسی میکنه برای همین قفلش میکنن منابع رو تا در آن واحد ینفر بیشتر بهش دسترسی نداشته باشه تا از این مشکلا جلوگیری شهZ ح