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