Форум сайта python.su
сделал для теста скрипт, 50 спящих потоков..
import time
import threading
global semaph
semaph = threading.Semaphore(1)
def myfunc():
semaph.acquire()
for i in range(5):
print "test"
tume.sleep(20)
semaph.release()
for i in range(50):
_my_thr = threading.Thread(target = myfunc, name = i + " : Thread")
_my_thr.start()
Офлайн
вот неплохая свежая ссылка по локам и производительности http://www.dabeaz.com/blog/2009/09/python-thread-synchronization.html
Офлайн
каждому потоку нужно место для стека. Вот и набегает…
Офлайн
да..но что он в этот стек напихивает на 400 Мб…?
Офлайн
goblin_maksничего - это резерв
да..но что он в этот стек напихивает на 400 Мб…?
Офлайн
reserved, but not committed pages.
Немного стека занимает сам питон для каждого потока (python frames лежат на C стеке). А еще резирвируется несколько мегабайтов на поток (зависит от версии операционки, на линуксе можно поменять через ulimit).
400 MB - это, должно быть, зарезервированный объем. Реально используемый объем должен быть меньше.
Или у тебя не так?
Офлайн
да нет..все так..но просто посмотрел..что указатель поотока занимает 8 К.. плюс стек…ну думаю ~400 Мб не наберется.. и еще смутили показания vmstat a …котороые до и после старта практически не изменились..зато в top показания просто убили…вот и решил узнать кто правду показывает а кто врет..
Офлайн