Почему эмуляторы терминала Linux не поддерживают насыщенные цвета?

Проблемой, как всегда, является конкуренция ресурса. Необходимо ограничить количество процессов/потоков, которые работают одновременно.

Кроме того, наличие параллельных потоков во многом зависит от того, какая обработка будет выполнена. Намного лучше, если существует хорошее соединение программирования: память, CPU, i/o, и т.д. Если все подпроцессы будут делать весь CPU, то наличие выполнения 10-20 сразу ничего не ускорит. Вы могли попытаться сдать обработку в аренду к другим машинам; например, использование ssh, чтобы запустить запросы к другим машинам и вернуть результаты.

Быстрая и грязная первичная обработка может быть чем-то как:

N=$1 # max number to iterate on
shift # rest of command line is the command to run: e.g. "./random"
maxcount=10 # maximum in the pool
curcount=0  # how many currently in the pool
reaper () {
    wait
    curcount=`expr $curcount - 1`
}
spawnnext () {
    n=$1
    shift
    while [ $curcount -ge $maxcount ]; do
        sleep 1 # wait for a free slot in the pool
    done
    echo $n
    "$@" &
    curcount=`expr $curcount + 1`
}

trap 'reaper' CHLD

for (( i=0; i < $N; i++)); do
    spawnnext $i "$@"
done

Примечание; Я не протестировал это; просто описал его на лету.

Но я сделал бы это в более высоком уровне, лучше работающий язык, такой как Python: https://stackoverflow.com/questions/3033952/python-thread-pool-similar-to-the-multiprocessing-pool

12
19.04.2013, 17:39
2 ответа

Нет никакой технической причины его, чтобы не быть возможной. Однако нет многих причин для почему не практичный. С ограниченным количеством экранного агента по операциям с недвижимостью, которого символы представляют на экране, Вам было бы нелегко находить использование для более затем 256 одновременных цветов на экране.

Насколько я знаю, что терминальные клиенты используют пространство индексированного цвета. Одна из причин этого - то, что в его самой простой форме, 256 индексированных цветов могут быть описаны с одним байтом. Пока цветовому пространству RGB нужны два или три байта. Рассматривая, как цвета кодируются в терминальном потоке, каждый цвет, по крайней мере, составил бы два байта + любая умная разметка. Это не могло бы быть большими тисками памяти проблемы, однако когда на потоке сети реального времени они могли бы сложить на задержке, особенно (исправьте меня, если я неправ), каждый символ отправляется в своем собственном пакете.

7
27.01.2020, 19:56

На самом деле нет текущей причины. За исключением, возможно, управляющих кодов, которые были добавлены всего несколько лет назад для поддержки истинного цвета. Многие терминалы теперь поддерживают 24-битный цвет, см. https://gist.github.com/XVilka / 8346728

2
27.01.2020, 19:56

Теги

Похожие вопросы