12.0 (Конспект)HighLevelLanguages
На чём написано ядро линукс? Оно написано на си. Есть операционные системы, ядро которых было написано на ассемблере, но это было давно, и сейчас таких нет (популярных).
В качестве языка-склейки в Линуксе используется shell. Также сейчас иногда используют Python.
Windows по большей части пишется на C++, а в качестве языка склейки используется C#.
Встаёт вопрос: неужели C - это универсайльный язык системного программирования? И да, и нет, потому что с одной стороны вы получите отличное решение, но код будет очень большой.
Работая с C вы имеете понимание как работает система на низком уровене, но, как только вы переходите на более высокоуровневый язык, это идея пропадает. И этот факт не даёт возможность отслеживать сколько памяти использует программа.
Если говорить о питоне, он - кросплатформенный язык, но не стоит на это опираться, так как существуют функции, которые эксклюзивны для той или иной операционной системы. Например, модули os и sys завязвны на операционной системе. НО Python разрабатывался на Linux, поэтому на нём можно без проблем программировать модули для данной ОС.
Shell - это тоже высокоуровневый язык программирования, но ориентированый на работу с системными объектами, в отличии от Python.
Python может напрямую взаимодействовать с shell с помошью модуля os или subprocess.run. И это наглядный пример того, что пользуюся высокоуровневым языком программирования, мы можем забыть сколько ресурсов может быть использовано. Какой-то файл может содержать, например, весь вывод shell, который может занимать гигабайт.
Маленькие приложения более ффективно (в плане ресурсов компьютера) писать на C, а в районе 2000 строк - уже разницы с питоном никакой нет.
threading - возможность написания кода, который выполняется в одном и том же адресном пространстве, но имеет несколько потоков выполнения. В Python нет нормальный "трэдов", потому что в нём есть Global Interpreter Lock. Это такая штука, придумманный в прошлом тысячелетии механизм, который позволяет блокировать выполнение одного интерпретатора в одном потоке, когда происходит выполнение в другом потоке. И этим достигается быстродействие написанных программ без "трэдов". Так что Python - язык однопоточный.
напишем программу с мультипроцессингом:
Теперь программа с использованием Pipe:
И программа с "пулом" процессов.