Пример реализации green thread? Какого реализация зеленных потоков что в виртуальных машинах или вообще где(на си подобных языках, не лиспы всякие), хоть убейте но я не могу понимать код из 1000 файлов.
Именно как написать его не где не считерив..
Как написать планировщик потоков, точнее, что для этого нужно иметь, знать, полный перечень. Типа своя область памяти, своя Виртуальная машина. Это все уже есть. Больше 100 опкодов со всеми типами адресации. Проект чисто фановый.
Правильно ли я понимаю, что нужно реализовать систему прерываний, и планировщик потоков, или можно написать без него(а в исходниках virual box я не находил слова прерывание IRQ, может плохо искал). И вообще имитация прерываний чисто на первый взгляд плохо скажется на производительности). Плюс все хочется сделать в 1 потоке не где не считерив, и не выйти за рамки своей области кода, а прерывания от внешних устройств нуждаются в своих потоках)

3 Апр 2021 в 19:57
197 +1
0
Ответы
1

Для реализации green threads вам необходимо создать собственный механизм планирования выполнения потоков. Вот пример простой реализации green thread на языке С:

#include <stdio.h>
#include <stdlib.h>
#include <ucontext.h>
#define STACK_SIZE 1024
ucontext_t main_context, thread1_context, thread2_context;
char thread1_stack[STACK_SIZE];
char thread2_stack[STACK_SIZE];
void thread1() {
for(int i = 0; i < 5; i++) {
printf("Thread 1 is running\n");
swapcontext(&thread1_context, &main_context);
}
}
void thread2() {
for(int i = 0; i < 5; i++) {
printf("Thread 2 is running\n");
swapcontext(&thread2_context, &main_context);
}
}
int main() {
getcontext(&thread1_context);
thread1_context.uc_link = &main_context;
thread1_context.uc_stack.ss_sp = thread1_stack;
thread1_context.uc_stack.ss_size = sizeof(thread1_stack);
makecontext(&thread1_context, thread1, 0);
getcontext(&thread2_context);
thread2_context.uc_link = &main_context;
thread2_context.uc_stack.ss_sp = thread2_stack;
thread2_context.uc_stack.ss_size = sizeof(thread2_stack);
makecontext(&thread2_context, thread2, 0);
for(int i = 0; i < 5; i++) {
printf("Main thread is running\n");
swapcontext(&main_context, &thread1_context);
printf("Main thread is running\n");
swapcontext(&main_context, &thread2_context);
}
return 0;
}

Этот код создает два потока thread1 и thread2, которые поочередно выполняются в рамках общего контекста выполнения. Каждый поток после выполнения переключается обратно на контекст основного потока. Таким образом, достигается эффект имитации многозадачности и планирования выполнения потоков.

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

Имитация прерываний может сказаться на производительности, но в некоторых случаях это необходимо для обеспечения отзывчивости системы на внешние события. Поэтому важно тщательно продумать архитектуру вашей системы, чтобы минимизировать негативное влияние имитации прерываний.

Надеюсь, этот пример поможет вам понять, как можно реализовать green threads и планировщик потоков на языке C.

17 Апр в 19:38
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 89 810 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир