бесконечный цикл VS планировщик

Общий подход:

$ awk '{ count[$2]++ }
       END {
           for (name in count)
               printf("%s signed %d time(s)\n", name, count[name])
       }' <file
Harold signed 1 time(s)
Dan signed 1 time(s)
Sebastian signed 1 time(s)
Suzie signed 4 time(s)
Jordan signed 2 time(s)
Suzan signed 1 time(s)

Т. е. использовать ассоциативный массив/хэш для хранения количества просмотров определенного имени. В блоке ENDпереберите все имена и распечатайте сводку для каждого.

Для более удобного форматирования измените заполнитель %sв вызове printf()на что-то вроде %-10s, чтобы зарезервировать 10 символов для имен (по левому краю -по ширине ).

$ awk '{ count[$2]++ }
       END {
           for (name in count)
               printf("%-10s signed %d time(s)\n", name, count[name])
       }' <file
Harold     signed 1 time(s)
Dan        signed 1 time(s)
Sebastian  signed 1 time(s)
Suzie      signed 4 time(s)
Jordan     signed 2 time(s)
Suzan      signed 1 time(s)

Больше возни с выводом (, потому что мне скучно):

$ awk '{ count[$2]++ }
       END {
           for (name in count)
               printf("%-10s signed %d time%s\n", name, count[name],
                      count[name] > 1 ? "s" : "" )
       }' <file
Harold     signed 1 time
Dan        signed 1 time
Sebastian  signed 1 time
Suzie      signed 4 times
Jordan     signed 2 times
Suzan      signed 1 time
1
08.01.2021, 09:03
1 ответ

Вы обсуждаете разницу между не -упреждающим и упреждающим планированием.

не -упреждающий (также называемый кооперативным )немного проще (таймер не требуется ), и ему не нужны блокировки при взаимодействии потоков. Примеры Apple Mac OS9 и более ранние версии, я думаю ранняя MS -Windows, множество встроенных систем и микропотоки -.

Итак, таймер нужен. Однако на ваш вопрос о простейшем оборудовании. Unix нуждается в MMU, а это гораздо сложнее, чем таймер. (На самом деле существуют Unix-подобные системы, в которых нет MMU, и во многих ситуациях они работают одинаково (различия заключаются в :отсутствии безопасности, отсутствии подкачки/пейджинга)

Еще один способ разрешить переключение задач для случая while true. Является ли использовать инъекции кода. Компилятор или загрузчик будет внедрять код для совместной работы. Это может быть трудно сделать. :Загрузчику может не хватать информации, чтобы знать, где она нужна. Это может нарушить предположения об атомарности. При правильном языке и компиляторе это возможно можно было бы сделать хорошо. Однако я не знаю ни одного примера.

1
18.03.2021, 22:38

Теги

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