OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Пятница, 20 Июнь, 2025 02:23

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 82 ]  На страницу Пред.  1, 2, 3, 4, 5  След.
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Вторник, 29 Август, 2006 12:24 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
Vlad писал(а):
Ну конечно. Представь простейшую ситуацию - интерфейсный поток (кнопочки, окошки) и вычислительный. И попробуй написать "шедулер", который будет нормально распределять ресурсы между обоими (а не тупо переключаться с одного на другой).


Эта задача решена. Решение подробно описано в книге "Project Oberon":

Цитата:
We can now scrutinize the following version of the task scheduler.
The reader should relate this to procedure Loop in the module Oberon
listed in detail at the end of this Chapter.
Код:
get mouse position and state of keys;
LOOP
  IF keyboard input available THEN
    read character
    IF character is escape THEN
      broadcast neutralize message to viewers
    ELSIF character is setup THEN
      send mark message to viewer containing mouse
    ELSE
      send consume message to focus viewer
    END;
    get mouse position and state of keys
  ELSIF at least one key pressed THEN
    REPEAT
      send track message to viewer containing mouse;
      get mouse position and state of keys
    UNTIL all keys released
  ELSE (*no key pressed*)
    send track message to viewer containing mouse;
    get mouse position and state of keys;
    WHILE mouse unmoved and no keyboard input DO
      take next task in ring as current task;
      IF current task is unsafe THEN remove it from ring END;
      send continue message to current task;
      assure current task in ring again;
      get mouse position and state of keys
    END
  END
END


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вторник, 29 Август, 2006 12:41 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Сергей Губанов писал(а):
Эта задача решена. Решение подробно описано в книге "Project Oberon":


Это решение будет на 100% грузить проц. Т.е., непригодно для многозадачных ОС.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вторник, 29 Август, 2006 16:40 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
Vlad писал(а):
Это решение будет на 100% грузить проц. Т.е., непригодно для многозадачных ОС.


1) В OS Oberon это главный цикл. Многозадачность от этого не то что не страдает, а выигрывает - нет оверхеда на переключение контекстов задач.

2) Если Вы такой цикл захотите использовать в приложении Windows, то используйте внутри него средства синхронизации Windows.

Самое простое решение - тупо вставить Sleep:
Код:
LOOP
  t0 := Now();
  QuantOfWork;
  t1 := Now();
  dt := quantOfTime - (t1 - t0);
  IF dt > 0 THEN Sleep(dt) END
END

Если QuantOfWork выполняется быстрее чем за quantOfTime миллисекунд, то оставшееся время dt = quantOfTime - (t1 - t0), можно и поспать. А если не быстрее, то спать некогда - пора следующий квант работы выполнять.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Среда, 30 Август, 2006 19:01 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Сергей Губанов писал(а):
Vlad писал(а):
Это решение будет на 100% грузить проц. Т.е., непригодно для многозадачных ОС.


1) В OS Oberon это главный цикл. Многозадачность от этого не то что не страдает, а выигрывает - нет оверхеда на переключение контекстов задач.


Оверхеда нет, впрочем как и многозадачности тоже нет...

Сергей Губанов писал(а):
2) Если Вы такой цикл захотите использовать в приложении Windows, то используйте внутри него средства синхронизации Windows.
Самое простое решение - тупо вставить Sleep:


Это и будет тупым и тормозным решением.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Четверг, 31 Август, 2006 04:52 

Зарегистрирован: Вторник, 04 Июль, 2006 13:04
Сообщения: 88
Откуда: Novosibirsk
Vlad писал(а):
Боль в том, что вообще надо что-то делить. Из-за этого в коде появляются инородные включения в лице всяких callback'ов и т.п.

NET. prosto drugaya ierarhiya procedur.
callback niprichem.
Vlad писал(а):
Ну конечно. Представь простейшую ситуацию - интерфейсный поток (кнопочки, окошки) и вычислительный. И попробуй написать "шедулер", который будет нормально распределять ресурсы между обоими (а не тупо переключаться с одного на другой). Нет, я понимаю если речь идет о какой-то железке, где все в твоих руках и даже ОС нет. Тогда можно все по тактам расчитать под конкретный проц. А если речь идет об обычной винде/маке/линуксе - программа с таким "шедулером" будет жрать 100% ресурсов и при этом ничего полезного не делать.

Vy opyat primenyaete mnogopotochny vzglyad na mir))
opyat "tupo perekluchatsya", "raspredelyat", "po taktam", ''jrat 100%"...
("jrat" budet tolko esli est fonovye zadachi. esli delat nechego to
budet SPAT. NE krutitsya v cycle a HLT. tochno kak i v
luboy mnogozadachnoy OS)) posmotri nakonec ishodnik, Vlad)) )

A ya govoril pro konechnye avtomaty.
ne budet dvuh potokov. budet odin. kotory budet reagirovat na
deystviya polzovatelya. a esli deystviy net to delat chast vychisleniy.
eta shema ne imeet preimuschestv tolko kogda v vychisleniyah
glubokaya rekursiya, prichem slognaya, ne svodimaya k iteracii.
tolko togda nado preryvat fonovye vychisleniya po taimeru...
no eto byvaet redko... vot naprimer u Iriny (topik Mnogopotochnost) takogo net.

Vlad писал(а):
Какого года эта литература? Народ вовсю многоядерными процами затаривается, а вы нам тут W3.11 рекламируете....

svejaya)) nekotorie veschi ne ustarevayut)) ne w311, ne yadro OS a
arhitekturu odnogo ee prilogeniya obsugdaem... kstati imho vytesnya-
yushuyu mnogozadachnost vveli v Win95 bolshe chtob izolirovat
napisannye na C prilogeniya ot glukov drug druga))... a ne potomu chto
to-ge samoe nelzya bylo sdelat kooperativno. mogno. no na C - trudno.
prosto potomu chto odin plohoy programmist isportit vse))
pochemu kstati win311 voobsche iznachalno delaly kooperativno
na Pascale? mogli ved srazu sdelat "kak nado"?))
esche...
menya vsegda porajayut ludi govoryaschie - Windows( Linux...
x86...mnogoyaderniki... i tak dalee...) rasprostraneny znachit
oni tehnologicheski luchshe i vsem nado ih ispolzovat.
a Vam ne prihodit v golovu chto oni mogut byt rasprostraneny po DRUGIM
prichinam? naprimer potomu chto est ludi rasprostranyayushie ih i poluchayshie za eto vashi dengi...
ih pokupayut prosto potomu chto ih prodayut))
a ya vot sebe mnogoyadernik brat ne budu... poka u nih shina pamyati
obschaya))... mne dlya kompilyacii bolshe vsego podhodit odnoyadernik a64 s nizkolatentnoy ddr1... offtop...

Vlad писал(а):
...В общем случае все равно нужны...
Очень хочу посмотреть на однопотоковую работу с COM-портом в винде.

vzaimodeystvie s OS i vneshnim mirom budet TO-GE samoe,
ya i ne govoril chto tut glukov menshe budet))
tolko vnutri prilogeniya prosche))


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Четверг, 31 Август, 2006 05:43 

Зарегистрирован: Вторник, 29 Ноябрь, 2005 21:41
Сообщения: 1030
Vlad писал(а):
Сергей Губанов писал(а):
Vlad писал(а):
Это решение будет на 100% грузить проц. Т.е., непригодно для многозадачных ОС.


1) В OS Oberon это главный цикл. Многозадачность от этого не то что не страдает, а выигрывает - нет оверхеда на переключение контекстов задач.


Оверхеда нет, впрочем как и многозадачности тоже нет...

Многозадачность есть. Многопоточности нет.
Vlad писал(а):

Сергей Губанов писал(а):
2) Если Вы такой цикл захотите использовать в приложении Windows, то используйте внутри него средства синхронизации Windows.
Самое простое решение - тупо вставить Sleep:


Это и будет тупым и тормозным решением.

Можно и не вставлять. Разберется и так.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Суббота, 02 Сентябрь, 2006 06:17 

Зарегистрирован: Вторник, 04 Июль, 2006 13:04
Сообщения: 88
Откуда: Novosibirsk
Kstati perspektivnee vsego seychas vyglyadit svyazka NetBSD-Xen-OberonApplication...
Hostovaya NetBSD(mogno i Linux tolko on imho huge strukturirovan, bolee haotichnaya arhitektura) daet poddergku lubogo geleza i poddergku staryh programm...
Xen daet bystruyu virtualizaciyu s otkazoustoychivostyu, migraciey i t.p. ...
Nu a Oberon eto idealnaya gostevaya OS, idealny rantaim zatochenny pod odno edinstvennoe konkretnoe prilogenie, (ne obyazatelno klientskoe, arhitektura tipa System3 podhodit i dlya vydelennogo servera, prosto potok zaprosov budet idti s setevki a ne s
konsoli)... "daesh kagdomu prilogeniyu svoy komputer i svoyu optimizirovannoyu pod eto prilogenie OS"!))

eta infrastruktura horosho podhodit dlya korporativnyh zadach, dlya shkolnyh terminalnyh klassov...

IMHO Oberon-soobshestvu OCHEN polezno bylo by podumat nad perspektivami etogo napravleniya...

Nad sredstvami razrabotki pod NetBSD/Xen/System3...
nugen nekotory gibrid, rantaim tipa Modula2/System3/BlackBox, rabotayuschiy nad Xen...
i sredstva razrabotki dlya nego... mogno - krossrazrabotki...

imenno v etoy oblasti liniya Oberona vne konkurencii
i moget polnostyu raskryt vse svoi preimushestva...

vam interesno?)) nadeyus chto opravdal svoy nick))
mne-interesno))

p.s. chudes ne byvaet...


Последний раз редактировалось CheshireCat Понедельник, 04 Сентябрь, 2006 03:37, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Воскресенье, 03 Сентябрь, 2006 03:47 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 02:12
Сообщения: 485
Откуда: KZ
Для чего BlackBox переносится на Linux/FreeBSD? Чтобы BlackBox мог полностью использовать те возможности, которые предоставляют эти операционные системы, в том числе и для того, чтобы получить хорошую производительность на этих системах. Иначе можно запускать BlackBox под wine - для каких-то задач этого достаточно. Xen - это всего лишь более быстрая и, возможно, менее глючная альтернатива wine, я правильно понимаю?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Понедельник, 04 Сентябрь, 2006 03:55 

Зарегистрирован: Вторник, 04 Июль, 2006 13:04
Сообщения: 88
Откуда: Novosibirsk
v principe - da. pravda skoree kak vmware/virtualpc,
to est emuliruet ne windows-api a "gelezo-api"...
nechto tipa etogo bylo i est na mainframe-ah kak ya ponimayu... da i krome xen est drugie varianty...
v xen samoe vkusnoe eto ne tolko skorost...
kstati dlya polucheniya horoshey skorosti chasto
prihoditsya ne stolko "ispolzovat krutie sredstva os", skolko obhodit te iz nih kotorye meshayut))...

ya prosto popytalsya naiti realny variant resheniya dvuh meshayushih shirokomu primeneniyu System3-podobnyh legkovesnyh arhitektur problem. a imenno - draivera i poddergka staryh/drugih programm...

vprochem eto konechno poka vsego-lish mnogoobeschayushaya teoriya...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вторник, 05 Сентябрь, 2006 14:29 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
GUEST писал(а):
Сергей Губанов писал(а):
Оверхеда нет, впрочем как и многозадачности тоже нет...

Многозадачность есть. Многопоточности нет.


А "многозадачность" до тех пор, пока ни одна "задача" не заглючит и не откажется отдать управления другим "задачам". Это мы уже проходили.

GUEST писал(а):
Сергей Губанов писал(а):
2) Если Вы такой цикл захотите использовать в приложении Windows, то используйте внутри него средства синхронизации Windows.
Самое простое решение - тупо вставить Sleep:

Vlad писал(а):
Это и будет тупым и тормозным решением.

Можно и не вставлять. Разберется и так.


Кто разберется?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вторник, 05 Сентябрь, 2006 15:16 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
CheshireCat писал(а):
Vlad писал(а):
Боль в том, что вообще надо что-то делить. Из-за этого в коде появляются инородные включения в лице всяких callback'ов и т.п.

NET. prosto drugaya ierarhiya procedur.
callback niprichem.


Да? Вот простейшая процедура линейного поиска:

Код:
for(int i = 0; i < n; i++)
    if (array[i] == x)
        return true;
return false;


"Распараллель" мне выполнение двух таких процедур одновременно. И мы посмотрим насколько это "просто". И какую тут можно придумать "иерархию".

CheshireCat писал(а):
Vy opyat primenyaete mnogopotochny vzglyad na mir))
opyat "tupo perekluchatsya", "raspredelyat", "po taktam", ''jrat 100%"...
("jrat" budet tolko esli est fonovye zadachi. esli delat nechego to
budet SPAT. NE krutitsya v cycle a HLT. tochno kak i v
luboy mnogozadachnoy OS)) posmotri nakonec ishodnik, Vlad)) )


Какой исходник? В приводившемся псевдоисходнике никакого HLT я не заметил.

CheshireCat писал(а):
A ya govoril pro konechnye avtomaty.


Я понял, что про КА. Я говорю о том, что применять их для реализации многопоточности неудобно для большинства задач.

CheshireCat писал(а):
svejaya)) nekotorie veschi ne ustarevayut)) ne w311, ne yadro OS a
arhitekturu odnogo ee prilogeniya obsugdaem...


Такая архитектура приложения, как правило, сложна и не позволяет использовать многоядерность процессора.

CheshireCat писал(а):
naprimer potomu chto est ludi rasprostranyayushie ih i poluchayshie za eto vashi dengi... ih pokupayut prosto potomu chto ih prodayut))


Если будет востребованная ОС на Обероне, то всегда найдутся люди, которые будут распространять ее за деньги. Не надо путать причину и следствие.

CheshireCat писал(а):
a ya vot sebe mnogoyadernik brat ne budu... poka u nih shina pamyati
obschaya))... mne dlya kompilyacii bolshe vsego podhodit odnoyadernik a64 s nizkolatentnoy ddr1... offtop...


А я буду брать двуядерник. Потому что компилить на нем почти в два раза быстрее (на работе уже такой использую).

CheshireCat писал(а):
Vlad писал(а):
Очень хочу посмотреть на однопотоковую работу с COM-портом в винде.

vzaimodeystvie s OS i vneshnim mirom budet TO-GE samoe,
ya i ne govoril chto tut glukov menshe budet))
tolko vnutri prilogeniya prosche))


А я и не говорю про глюки. Я говорю, что хочу увидеть реализацию. В частности использование WaitCommEvent в однопотоковом варианте.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вторник, 05 Сентябрь, 2006 20:38 
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
http://bbforum.metasystems.ru/viewtopic.php?p=2737#2737


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Среда, 06 Сентябрь, 2006 09:11 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Илья Ермаков писал(а):
http://bbforum.metasystems.ru/viewtopic.php?p=2737#2737


Сообщение о бета-многопоточности датировано 14.11.2005. Когда релиз? Блокируются ли все потоки на момент сборки мусора?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Среда, 06 Сентябрь, 2006 15:33 
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
???? Осенью 2005 года никаких сообщений о бета-многопоточности быть не могло...
Первое упоминание об экспериментах в этом направлении было мной сделано в июне-июле этим летом. В августе было принято решение о полной переделке ядра, за месяц создана полностью рабочая версия. Сейчас оптимизируем менеджер кучи, чтобы свести к минимуму эксклюзивный код для NEW. Срок выхода - в течение сентября.
Сборщик мусора морозит все потоки. Это общепринятый способ для компилируемых сред. .NET действует точно так же. (Это подробно описано у Рихтера. Вообще в механизмах .NET легко узнается первоисточник идей - ББ собственной персоной. Естественно, Шиперски со товарищи за годы работы в МС придумал много усовершенствований, за что ему могут сказать респект любители этой платформы...).
Поколения не реализованы, т.к. для этого требуется поддержка на уровне компилятора, что нарушает обратную совместимость (и, кстати, дает оверхед на присваивание указателей). Есть альтернативная идея, подобная поколениям, но она будет реализована позднее...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Среда, 06 Сентябрь, 2006 17:07 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Илья Ермаков писал(а):
???? Осенью 2005 года никаких сообщений о бета-многопоточности быть не могло...


Значит форум глючит. Или мой браузер.

Илья Ермаков писал(а):
Вообще в механизмах .NET легко узнается первоисточник идей - ББ собственной персоной.


Джависты бы очень обидились...

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


А разве присваивание указателей не должно делаться атомарно на уровне компилятора? Баръеры там и все такое? И нафига обратная совместимость (существуют гигабайты промышленного кода не допускающего перекомпиляции?)

Илья Ермаков писал(а):
Есть альтернативная идея, подобная поколениям, но она будет реализована позднее...


Что за идея?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Среда, 06 Сентябрь, 2006 17:30 
Администратор

Зарегистрирован: Вторник, 15 Ноябрь, 2005 01:14
Сообщения: 4722
Откуда: Россия, Орёл
Уважаемый Чеширский кот! Зачем же так сложно NetBSD/Xen/System3?
Есть же версии ETH Oberon (System 3) для Linux и Win32. Они опираются непосредственно на возможности ОС, как и BlackBox. Без всякой эмуляции.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Четверг, 07 Сентябрь, 2006 04:32 

Зарегистрирован: Вторник, 04 Июль, 2006 13:04
Сообщения: 88
Откуда: Novosibirsk
...kakoy ya uvajaemy?)) ya obychny musorny kot))

2Boris: ya pro nih konechno znayu)) i chasto ih dostatochno... xen ge daet neskolko dopolnitelnyh nishtyakov... vprochem u xen est i nedostatki konechno... potomu ya i sprashival kto chto dumaet...

2vlad:
[quote]А многозадачность до тех пор, пока ни одна задача
не заглючит и не откажется отдать управления другим
задачам. Это мы уже проходили[/quote]
gy) nu ladno - vot mi zametili oshibku) vasha reakciya?
...udivitelno pochemu mnogie delayut vyvod chto nugna
vytesnyayushaya mnogozadachnost)
nikakaya mnogozadachnost ne sdelaet programmu pravilnoy))
skoree naoborot - mnogozadachnost PRYACHET oshibki, ved tak?))
prosto potomu chto eto edinstvennoe chto my mogem sdelat esli
ispravit programmu ne mogem(naprimer esli ishodnikov net) ))
to est problema ne v otsutstvii vytesnyayushey mnogozadachnosti a v
kommercheskoy razrabotke programm)) a imenno - v tom chto ot polzovatelya pryachetsya algoritm. programma eto prodoljenie polzovatelya, ego chast. a ona iskustvenno izoliruetsya.
kajdy polzovatel dolgen byt soavtorom, inache ne primenit ee kak nado.

stepen gluchnosti opredelyaetsya TOLKO metodologiey
razrabotki i vopreki rasprostranennomu mneniyu nikak ne
svyazana s tipom mnogozadachnosti (ASSERT-a dostatochno
dlya lokalizacii gluka v lubom ee variante).

bolee togo, garantirovanno pravilno napisat mnogozadachnuyu
programmu v obschem sluchae trudnee - bolshe v golove derjat
nado... poetomu tut i sovetuyut - do teh por poka tolko mojno,
pishite odnozadachno... esli tebe "neudobno" - vpered,
ne sleduy sovetam, delay dalshe tak kak privyk))

[quote]Если будет востребованная ОС на Обероне, то всегда
найдутся люди, которые будут распространять ее за деньги.
Не надо путать причину и следствие[/quote]
a tut na samom dele net chetko vydelennoy prichiny i
sledstviya)) vezde prisutstvuyut momenty i togo i togo.
...kstati obychno tak i byvaet v realnosti, peresekayuschiesya
mnogestva, ne iskluchayushie... i potomu imho
boolean v yazike vreden, hvatit i SET. s elementami kotorye
mogut prisutstvovat hot vse srazu, neiskluchayusche... sm. statji po "russkoy logike"...
vesma osvejaet...

-----------
itogo - nalico obychnoe nezhelanie ponyat pro chto
idet razgovor... plus rashozhdenie v ponimanii terminov...popravimo))

vot vy predlagaete "zadachu" (perevel na BB, srazu smenil FOR na klassichesky
WHILE potomu chto eto prigoditsya dalee):
...
CONST n=100;
TYPE data=ARRAY(n) OF INTEGER;
PROCEDURE search(IN array:data; x:INTEGER):BOOLEAN;
VAR i:INTEGER;
BEGIN
i:=0;
WHILE ((i<n) & (array[i]#x)) DO INC(i) END;
RETURN (i<n);
END search;
...
zadachka postavlena kak vsegda nepolno)) i kak vsegda
vospolzuemsya etim))

kakoy _smysl_ vlogen v "dva poiska srazu"? dlya chego eto nado?
vypolnenie na dvuh processorah srazu - ne rassmatrivaem, ne prosili))
(
ne tolko poetomu, etot variant obychno trebuet podgonki pod arhitekturu
klientskogo computera chtob ot nego byl smysl. ne u vseh eshe core2))
etu podgonku delayut lish izredka v shtuchnyh programmah.
esli vy hotite imenno takuyu redkost - eto nado bylo _yavno zakazat_ za dopolnitelnuyu platu))
obychno programmist optimiziruet pod gelezo tolko kogda
bolshe net universalnyh optimizaciy... nu ili prosto emu nechem zanyatsya))
...kstati kooperativnaya mnogozadachnost moget byt realizovana i dlya raboty na neskolkih processorah. rassmatrivaya ih kak odin, pishetsya
specialny kompilyator. no obychno sdelat neskolko otdelnyh vzaimodeystvuyushih programm prosche i portabelnee...
)

predpologim chto smysl byl v tom chto rezultaty odnogo poiska mogut povliyat na hod drugogo i u nas est prichiny dumat chto eta vygoda budet chastaya... a imenno

PROCEDURE run;
VAR array1:data; array2:data;
x,i:INTEGER;
found:BOOLEAN;
BEGIN
FOR i:=0 TO n-1 DO array1[i]:=n-1-i; array2[i]:=i; END;
x:=1;
IF (search(array1,x)) OR (search(array2,x)) THEN
found:=TRUE
ELSE
found:=FALSE
END
END run;

vy mne predlagaete napysat nekiy sheduler kotory budet
iskat v oboih massivah srazu, prichem odnozadachno? ok.
i dumaete chto pri etom on u menya obyazatelno dolgen poluchitsya
TOLSTY i NAVOROCHENNY? nea, eto v usloviyah ne ogovarivalos))
my tut naoborot sovetuem ne uslojnyat sebe zadachu vneshnim
shedulerom a pisat specializirovanny svoy vnutrenny. specializaciya
oznachaet prostotu, zatochennost pod danny moment, dopustim perenos chasti
prikladnoy logiki na sheduler (sheduler nash, che hotim to snim i delaem).
naibolee prostaya podzadacha - proverka odnogo elementa.
naibolee prostoy sheduler - po ocheredi, po odnomu, poryadok ne vagen.
podzadachi ochen uprostilis, prikladnaya logika
zamenena logikoy shedulera...
poluchitsya konechno prosto vot chto:

PROCEDURE search_both(IN array1:data; IN array2:data; x:INTEGER):BOOLEAN;
VAR i:INTEGER;
BEGIN
i:=0;
WHILE ((i<n) & (array1[i]#x) & (array2[i]#x)) DO INC(i) END;
RETURN (i<n);
END search_both;
...
IF search_both(array1,array2,x) THEN
...

princyp yasen? search_both eto SHEDULER kotory delaet
rabotu nad 1 elementom v oboih massivah po ocheredi)).
nu i zachem uslognyat eto cherez threads ili dage rabotoy s gruppami po M elementov?))
uslognenie na samom dele vam tolko mereschitsya...
skoree prosto PEREFORMULIROVKA zadachi budet...
i tak chasto byvaet...
prosto zapisyvaem chto i v kakom poryadke nado delat,
likvidiruya tem samym neobhodimost vo vneshnem shedulere.
a znachit i vliyanie i shedulera i potencialnyh oshibok/osobennostey
v nem na rezultat... esli vy ne stalkivalis s surprizami
povedeniya shedulerov i sinhronizaciy - moget vam prosto vezlo...
i ug derjat ih v golove vsyako trudnee chem paru strochek
svoey programmy...
tak nazyvaemye "professionolnye" programmisty konechno poluchayut
dengi za process i zainteresovany v tom chtob zaputyvat i muchitsya...
nu a nam glavnoe - rezultat. potomu u nas podhod poprosche.
sheduler zadaet poryadok vypolneniya raboty. po opredeleniyu
eto prosto chastny sluchay procedury.

imho tut v trede dostatochno obyasneno kogda svoy sheduler stoit ispolzovat
a kogda net. Vam nikto ne zapreschaet imet svoe mnenie))


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Четверг, 07 Сентябрь, 2006 10:10 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
CheshireCat писал(а):
Цитата:
А многозадачность до тех пор, пока ни одна задача
не заглючит и не откажется отдать управления другим
задачам. Это мы уже проходили

gy) nu ladno - vot mi zametili oshibku) vasha reakciya?



Не надо уводить разговор в сторону.

CheshireCat писал(а):
skoree naoborot - mnogozadachnost PRYACHET oshibki, ved tak?))


В контексте ОС - вытесняющаю многозадачность позволяет уменьшить ущерб от ошибки в одной из задач для всех остальных.


CheshireCat писал(а):
prosto potomu chto eto edinstvennoe chto my mogem sdelat esli
ispravit programmu ne mogem(naprimer esli ishodnikov net) ))
to est problema ne v otsutstvii vytesnyayushey mnogozadachnosti a v
kommercheskoy razrabotke programm)) a imenno - v tom chto ot polzovatelya pryachetsya algoritm. programma eto prodoljenie polzovatelya, ego chast. a ona iskustvenno izoliruetsya.
kajdy polzovatel dolgen byt soavtorom, inache ne primenit ee kak nado.


Да-да. "Пользователи не приняли программу, пришлось всех уничтожить" (c). Ты вообще про каких пользователей говоришь? Допустим ты говришь о пользователях-программистах. Если ты думаешь, что мне, например, интересны алгоритмы и что при наличии исходников я полезу исправлять глючную программу, то ты жестоко ошибаешься. Скорее глючную программу я отправлю туда же, куда отправляются символы с помощью клавиши Del. Если программа мне очень нравится, то я поищу апдейт. И только если программа мне очень нравится и апдейтов нет, то я запасусь кофе и полезу ковыряться в ее потрохах. Скажу, что до такого варианта я доходил всего два раза. В первом случае я настолько впечатлился "алгоритмами", что все-таки сменил свою любимую программу на другую (хотя конкретный глюк и пофиксил, но понял, что там таких еще море). Во втором случае после изучения исходников я нашел workaround.

CheshireCat писал(а):
stepen gluchnosti opredelyaetsya TOLKO metodologiey
razrabotki i vopreki rasprostranennomu mneniyu nikak ne
svyazana s tipom mnogozadachnosti (ASSERT-a dostatochno
dlya lokalizacii gluka v lubom ee variante).


ASSERT'а - это всего лишь один из инструментов отладки и поддержания контрактного программирования. Если ты пользуешься только им - это твои личные трудности.

CheshireCat писал(а):
...kstati obychno tak i byvaet v realnosti, peresekayuschiesya
mnogestva, ne iskluchayushie... i potomu imho
boolean v yazike vreden, hvatit i SET. s elementami kotorye
mogut prisutstvovat hot vse srazu, neiskluchayusche... sm. statji po "russkoy logike"...
vesma osvejaet...


Чего-чего?

CheshireCat писал(а):
kakoy _smysl_ vlogen v "dva poiska srazu"? dlya chego eto nado?
vypolnenie na dvuh processorah srazu - ne rassmatrivaem, ne prosili))


Почему это не рассматриваем???

CheshireCat писал(а):
...kstati kooperativnaya mnogozadachnost moget byt realizovana i dlya raboty na neskolkih processorah.


Это уже будет полный маразм.

CheshireCat писал(а):
princyp yasen? search_both eto SHEDULER kotory delaet


Ясен. Вместо одной простой универсальной процедуры делаем несколько сложных специализированных. При этом второй проц все равно стоит. Круто. Впрочем, если честно, я и не надеялся, что ты изобразишь что-то интересное. Кстати, вот тебе информация для общего развития: некоторые языки позволяют без помощи программиста распараллеливать вызов типа f(g(), k()) так, чтобы g() и к() вычислялись на разных процессорах. Попробуй в свете этого переоценить "усложнение" и вообще осмысленность программирования многопоточности в терминах КА.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Четверг, 07 Сентябрь, 2006 14:04 

Зарегистрирован: Вторник, 04 Июль, 2006 13:04
Сообщения: 88
Откуда: Novosibirsk
aaa pohoge Vlad prosto agressivnoy boltologiey lubit zanimatsya i ne chitaet sovsem kakie otvety na kakie voprosy emu pishut... nu raz tak to i govorit dalee bolshe tut ne o chem, ne povtoryatsya ge po 3-mu razu... vsego horoshego...

... sednya s udivleniem uznal chto Ulm-oberon vrode
podderjivaet i386, vopreki tomu chto v spiskah kompilyatorov napisano... ochen interesno, budu smotret, sistema na pervy vzglyad blizka k tomu chto mne nado...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Четверг, 07 Сентябрь, 2006 23:17 
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Vlad писал(а):
А разве присваивание указателей не должно делаться атомарно на уровне компилятора? Баръеры там и все такое?

С точки зрения сборщика мусора обычное присваивание указателя будет атомарным, т.к. даже если контекст потока переключится в момент присваивания, значение останется в регистре потока, и сборщик отследит его как один из якорей.
Если же к одному указателю параллельно обращаются много потоков, то тут уже синхронизация доступа к ним - забота разработчика, как и для любых других разделяемых данных. Критическая секция, либо монитор...
Ставить же критическую секцию на каждое присваивание при компиляции - очень дорогая затея...
В NET компилятор делает совсем другое - он выставляет спец. флаг, который указывает сборщику, что в блоке памяти более старшего поколения появилась ссылка на объект из младшего. Без такого флага сборщик, прошедший только по младшему поколению, мог бы убить объект, якорь на который хранится в старшем.


Цитата:
Что за идея?


Сделать аналог поколений (хотя это слово уже не подойдет) не на уровне экземпляров, а на уровне типов. Т.е. для определенного приложения ядро запускается в режиме сбора статистики, фиксируется среднее время жизни и частота создания экземпляров каждого типа.
Затем на основании этих данных различные типы помечаются как относящиеся к тому или иному... будем называть пока поколению.
Затем эти метки используются в рабочем режиме.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 82 ]  На страницу Пред.  1, 2, 3, 4, 5  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2025, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB