Мне недавно задали этот вопрос в одном из интервью, и хотя я хорошо справился с первыми двумя частями [я предполагаю], я немного боролся с третьей. Вот вопрос:
У вас есть две программы для Linux, A и B. При запуске по отдельности A и B каждая занимает одну минуту в системе, которая была только что перезапущена. [то есть: свежая система: вы перезагружаете ее, входите в систему, получаете приглашение оболочки, запускаете программу.]
Что вы можете рассказать о программах, если:
а) когда бегают вместе, они занимают 2 минуты
б) когда бегают вместе, они занимают 1 минуту
в) когда бегают вместе, они занимают 30 секунд
Я сказал: а) что если они работают вдвое больше времени при совместной работе, они не разделяют взаимное исключение и борются за одни и те же ресурсы, вероятно, не разделяют какие-либо данные или инструкции кэша [и, таким образом, не не помогают друг другу с точки зрения кэша], и каждая программа нуждается в полном использовании указанного ресурса, чтобы ОС не могла их распараллелить.
Что касается б), я сказал, что если они могут работать так же быстро вместе, они, вероятно, разделяют некоторую пространственную / временную локализацию в наличных деньгах и могут быть должным образом распределены по конвейеру таким образом, что пока программа А ожидает что-то, программа B может выполняться между этими этапами, и наоборот - эффективно запускать их оба за 1 минуту.
Для с) я был немного застрял. Оглядываясь назад, я, вероятно, должен был сказать, что, возможно, программы A и B выполняли общую задачу, когда два из них, выполняющихся одновременно, могли выполнить указанное задание быстрее, чем одно, выполняемое в одиночку, например сборщик мусора. Но лучшее, что я смог придумать, это то, что, возможно, они загружались из одного и того же сектора на жестком диске, и это помогло им обоим быстро работать.
Я просто ищу информацию от некоторых умников здесь о вещах, которые я, возможно, пропустил. Позиция была для позиции платформы / системы, которая требует хорошего понимания аппаратного / программного обеспечения и операционных систем, а именно взаимодействия между ними, поэтому [я предполагаю] вопрос был задан.
Я также пытался придумать примеры, которые я мог бы применить к каждой части, чтобы помочь мне показать свои знания в реальных приложениях, но на месте мне не хватало.