Могут ли два потока быть назначены разным процессорам и выполняться одновременно?

У меня есть такой код, я просто пытаюсь его проверить.

import java.util.ArrayList;

public class Main {
    public static class MyThread extends Thread {
        public void run(){
            while(true);
        }
    }

    public static void main(String[] args) throws InterruptedException {
        ArrayList<MyThread> l = new ArrayList<>(100);
        int i;
        for (i = 0; i < 100; i++) {
            l.add(new MyThread());
        }
        for (i = 0; i < 100; i++) {
            l.get(i).start();
        }
        for (i = 0; i < 100; i++) {
            l.get(i).join();
        }
    }
}

Я прочитал много сообщений о различиях между параллелизмом и многопоточностью. Однако я хотел бы задать этот вопрос. Может ли ОС выбрать одновременное выполнение двух или более потоков, созданных одним и тем же процессом (не одним потоком, а разными, такими как t1 и t2)? Если это так, можем ли мы гарантировать, что это произойдет? Я думаю, что у меня проблемы с пониманием выполняемого расписания, потому что я думал, что если процесс создает поток, единственный процессор, который может выполнять эту задачу, - это тот, у которого процесс выполняется, но теперь я ' м не уверен.

Could the OS choose to execute two or more threads created by the same process (not the same thread, but different ones, like t1 and t2) at the same time? Да. If that's the case, can we ensure that it's happening?
tkausl 30.03.2021 01:50

На самом деле в вашем коде вообще нет параллельных потоков. Ваша программа выполняется последовательно в основном потоке. Вы должны звонить Thread.start(), а не Thread.run().

user207421 30.03.2021 02:49

@ user207421 ты прав, опечатка

Norhther 30.03.2021 02:52
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
3
55
1

Ответы 1

Фундаментальный принцип «параллелизма» заключается в следующем: ты не знаешь, ине могу знать, * что будет делать операционная система ».

В любой момент времени операционная система воспринимает, что есть «выполняемые потоки внутри выполняемых процессов». Каждый процессор, так сказать, соревнуется, чтобы получить шанс запустить его. А аппаратные прерывания и прочие вещи происходят постоянно. Следовательно, это состояние дел "хаотичный" в математическом смысле этого слова.

Следовательно, вы должны разрабатывать программное обеспечение, которое использует функции «сериализации» и «взаимного исключения» языка - на каком бы языке он ни был - в той степени, в которой это необходимо для приложения ваш.

Значит, это означает, что весь процесс может быть загружен в два ядра одновременно? Кроме того, я думал, что память распределяется между потоками, поэтому я не могу понять из этого

Norhther 30.03.2021 02:08

Другие вопросы по теме