Процессы не запущены одновременно
Я запускаю 2 отдельных экземпляра эквивалентного Java-кода для указанной ниже псевдопрограммы на двухъядерной машине без какой-либо другой активности на этой машине. Оба регистрируются в одном и том же файле, используя log4j.
for each url
step 1. download data from url to U //takes 3-5 seconds
step 2. perform computation on data f(U) = A. //0.1 sec
step 3. Store A to disk
step 4. perform computation on data g(U) = B. //0.5 sec
step 5. Store B to disk
Что-то странное происходит в логах. Я ожидаю, что эти 2 экземпляра будут работать полностью независимо друг от друга, и поскольку шаг 1 является самой длительной операцией, большую часть времени они оба должны ожидать ответа URL в журналах:
process M: downloading data from url1
process N: downloading data from url2
//below in random order
process M: performing computation on data f(U1) = A1
process N: performing computation on data f(U2) = A2
process M: storing to disk A1
process M: performing computation on data g(U1) = B1
process N: storing to disk A2
//etc...
Но журналы всегда, кажется, упорядочены как ниже САМОГО времени. Параллелизм не виден:
process M: downloading data from url1
process M: performing computation on data f(U1) = A1
process M: storing to disk A1
process M: performing computation on data g(U1) = B2
process M: storing to disk B1
process N: downloading data from url2
process N: performing computation on data f(U2) = A2
process N: storing to disk A2
process N: performing computation on data g(U2) = B2
process N: storing to disk B2
process M: downloading data from url3
//etc...
Что может быть причиной этой проблемы? Некоторые возможности:
Двухъядерные процессоры не используются должным образом?
Они не могут получить доступ к Интернету одновременно?
Ведение журнала как-то блокирует процесс?
Наконец, как мне заставить их работать параллельно?