Постановка проблемы:
Я столкнулся с проблемой при запуске следующей многопоточной программы. Программа порождает большое количество потоков (10 000), которые обрабатывают одно и то же значение массива байтов. Проблема усугубляется при высокой загрузке ЦП и при применении ограничений памяти (например, установка -Xms32m -Xmx32m).
Метод byteArrayToInt предназначен для преобразования определенного сегмента байтового массива. в целое число. Однако периодически он выдает неправильные значения. Ожидаемое значение для liVersion равно 1, но вместо этого наблюдаются случайные значения. Эта проблема возникает, даже если программа выполняется с достаточным объемом памяти и меньшим количеством потоков (даже с одним потоком), но становится значительно реже.
Целочисленное преобразование 2-го в 4-е значение pTestData, которое is [1, 0] должно быть 1, но оно периодически выдает случайные значения на выходе. Среда:
Операционная система: Windows 10
Версия Java: AdoptOpenJDK 17.0.10 Фрагмент кода:
[b]Постановка проблемы:[/b] Я столкнулся с проблемой при запуске следующей многопоточной программы. Программа порождает большое количество потоков (10 000), которые обрабатывают одно и то же значение массива байтов. Проблема усугубляется при высокой загрузке ЦП и при применении ограничений памяти (например, установка -Xms32m -Xmx32m). Метод byteArrayToInt предназначен для преобразования определенного сегмента байтового массива. в целое число. Однако периодически он выдает неправильные значения. Ожидаемое значение для liVersion равно 1, но вместо этого наблюдаются случайные значения. Эта проблема возникает, даже если программа выполняется с достаточным объемом памяти и меньшим количеством потоков (даже с одним потоком), но становится значительно реже. Целочисленное преобразование 2-го в 4-е значение pTestData, которое is [1, 0] должно быть 1, но оно периодически выдает случайные значения на выходе. [b]Среда:[/b] Операционная система: Windows 10 Версия Java: AdoptOpenJDK 17.0.10 [b]Фрагмент кода:[/b] [code]import java.util.Arrays;
public class TestMain { private static int miParallelThreadCount = 10000;
private static long mlExecutionIntervalInMillis=100;
public static void main(String[] args) { System.out.println("Startin tornado at interval: " + mlExecutionIntervalInMillis + " with parallel threads: " + miParallelThreadCount); while(true) { //Runs the test code to reproduce the issue runTornado(); try { Thread.sleep(mlExecutionIntervalInMillis); } catch (Throwable lThrowable) { System.out.println("Task failed due to: " + lThrowable.getLocalizedMessage()); lThrowable.printStackTrace(); } } }
private static byte[] compareInner(byte[] pTestData, int pStartIndex, int pLength) { //Copies the pTestData into new array as it is byte[] lbarrData = Arrays.copyOfRange(pTestData, 0, 0 + pTestData.length); //copies only 2ndand 3rd element from the array which is [1, 0] byte[] lbarrVer = Arrays.copyOfRange(lbarrData, 2, 4);
//Converts the array [1, 0] into integer, which should always return 1 int liVersion = byteArrayToInt(lbarrVer);
Постановка проблемы:
Я столкнулся с проблемой при запуске следующей многопоточной программы. Программа порождает большое количество потоков (10 000), которые обрабатывают одно и то же значение массива байтов. Проблема усугубляется при высокой...
Постановка проблемы:
Я столкнулся с проблемой при запуске следующей многопоточной программы. Программа порождает большое количество потоков (10 000), которые обрабатывают одно и то же значение массива байтов. Проблема усугубляется при высокой...
Постановка проблемы:
Я столкнулся с проблемой при запуске следующей многопоточной программы. Программа порождает большое количество потоков (10 000), которые обрабатывают одно и то же значение массива байтов. Проблема усугубляется при высокой...
Постановка проблемы:
Я столкнулся с проблемой при запуске следующей многопоточной программы. Программа порождает большое количество потоков (10 000), которые обрабатывают одно и то же значение массива байтов. Проблема усугубляется при высокой...
Предположим, у меня есть две функции: func1 и func2. func1 возвращает список из 3 целых чисел, а func2 принимает кортеж из 3 целых чисел. Как мне преобразовать список в кортеж таким образом, чтобы можно было предотвратить ошибки с помощью средств...