Найти - Пользователи
Полная версия: threading и virtMEM
Начало » Python для новичков » threading и virtMEM
1
goblin_maks
сделал для теста скрипт, 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()
решил посмотреть перформанс..оказалось что потоки спящие на семафоре требуют много свопа, в данной конфигурации 400 Мб…
зачем так много свопа? это при том что проц не грузится..RSS до 4 мб..
или делаю чтото не так?
slav0nic
вот неплохая свежая ссылка по локам и производительности http://www.dabeaz.com/blog/2009/09/python-thread-synchronization.html
Андрей Светлов
каждому потоку нужно место для стека. Вот и набегает…
goblin_maks
да..но что он в этот стек напихивает на 400 Мб…?
Александр Кошелев
goblin_maks
да..но что он в этот стек напихивает на 400 Мб…?
ничего - это резерв
Андрей Светлов
reserved, but not committed pages.
Немного стека занимает сам питон для каждого потока (python frames лежат на C стеке). А еще резирвируется несколько мегабайтов на поток (зависит от версии операционки, на линуксе можно поменять через ulimit).
400 MB - это, должно быть, зарезервированный объем. Реально используемый объем должен быть меньше.
Или у тебя не так?
goblin_maks
да нет..все так..но просто посмотрел..что указатель поотока занимает 8 К.. плюс стек…ну думаю ~400 Мб не наберется.. и еще смутили показания vmstat a …котороые до и после старта практически не изменились..зато в top показания просто убили…вот и решил узнать кто правду показывает а кто врет..
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB