C# Concurrency. Асинхронное программирование и многопоточность
Қосымшада ыңғайлырақҚосымшаны жүктеуге арналған QRRuStore · Samsung Galaxy Store
Huawei AppGallery · Xiaomi GetApps

автордың кітабынан сөз тіркестері  C# Concurrency. Асинхронное программирование и многопоточность

Борис Ш.
Борис Ш.дәйексөз келтірді5 күн бұрын
В отличие от Parallel.ForEach, параметр MaxDegreeOfParallelism по умолчанию (согласно документации) получает значение, равное числу ядер, и это логически и теоретически наиболее эффективное число потоков для асинхронного кода. Однако проблема в том, что Parallel.ForEachAsync использует это как количество одновременно обрабатываемых заданий, а не как количество потоков.
Комментарий жазу
Борис Ш.
Борис Ш.дәйексөз келтірді5 күн бұрын
И этот пример подвел нас к последнему правилу: не меняйте приоритет или привязку к процессору.
Комментарий жазу
Борис Ш.
Борис Ш.дәйексөз келтірді5 күн бұрын
Этот пример подводит нас к пятому правилу: чтобы избежать синхронизации, нужно удерживать блокировки как можно более короткое время, желательно только на время, необходимое для доступа к общему ресурсу, а не в течение выполнения всей операции. Если вы подумали, что правило «удерживать блокировки как можно более короткое время, а не в течение выполнения всей операции» противоречит четвертому правилу «удерживать блокировки в течение всей операции», то вы совершенно правы. Если блокировки слишком короткие, есть риск попасть в состояние гонки, а если блокировки слишком долгие, то возникает проблема синхронизации.
Комментарий жазу
Борис Ш.
Борис Ш.дәйексөз келтірді5 күн бұрын
И это подводит нас к четвертому правилу: блокировки должны удерживаться на протяжении всего выполнения операции. Возможно, сейчас вы попытаетесь возразить: «Нет, мы должны удерживать блокировки только в течение минимального периода времени!» — и будете правы, потому что слишком долгое удержание блокировок, скорее всего, приведет к синхронизации.
Комментарий жазу
Борис Ш.
Борис Ш.дәйексөз келтірді5 күн бұрын
Так мы подошли к третьему правилу: никогда не вызывайте неподконтрольный вам код, удерживая блокировку. Если нужно вызвать любой неподконтрольный вам код, то вызывайте его после снятия блокировок.
Комментарий жазу
Борис Ш.
Борис Ш.дәйексөз келтірді5 күн бұрын
Так мы подошли ко второму правилу: всегда устанавливайте блокировки в одном и том же порядке.
Комментарий жазу
Борис Ш.
Борис Ш.дәйексөз келтірді5 күн бұрын
Так мы подошли к первому правилу: всегда используйте блокировку при доступе к общим данным.
Комментарий жазу
Хэлен
Хэлендәйексөз келтірді1 апта бұрын
не меняйте приоритет или привязку к процессору
Комментарий жазу
Хэлен
Хэлендәйексөз келтірді1 апта бұрын
экстремальных случаях, когда блокировка удерживается слишком долго, возникает состояние голодания
Комментарий жазу
Хэлен
Хэлендәйексөз келтірді1 апта бұрын
Голодание — это ситуация, когда поток или группа потоков монополизирует доступ к некоторому ресурсу, не позволяя другому потоку или группе потоков выполнить какую-либо работу
Комментарий жазу