Операция блокировки не бесплатна.Во втором примере вы выполняете вдвое больше операций блокировки / разблокировки, чем в первом.Другие операции кажутся простыми обращениями к памяти, поэтому они не должны длиться очень долго.
Мое мнение таково, что в вашей системе вы проводите больше времени в блокировках, чем в реальной обработке, поэтому увеличивается количество блокировок.не актуально.Может быть иначе, если бы transfer
использовал медленный ввод, такой как диск или сеть.
Кстати, как вы сказали в комментарии, 400 потоков, вероятно, снова менее эффективны, чем намного меньшее число.Эмпирическое правило равно количеству ядер, которое вы будете использовать, увеличенное на переменный коэффициент, если обработка тратит время на ожидание ввода-вывода - если нет ввода-вывода, то никогда больше, чем доступные ядра.И верхний предел состоит в том, что объем памяти, используемой всеми потоками, не должен превышать объем памяти, который вы хотите использовать, и что накладные расходы на запуск и синхронизацию потоков остаются намного ниже, чем общее время обработки.