«Эмпирикалық нәтижелер тек жариялауға арналған, жұмыстың шынайы мотивтері эстетикалық». Майкл Скоттпен тамаша сұхбат

«Эмпирикалық нәтижелер тек жариялауға арналған, жұмыстың шынайы мотивтері эстетикалық». Майкл Скоттпен тамаша сұхбат Майкл Скотт - қазірдің өзінде 34 жыл Рочестер университетінде компьютерлік ғылым профессоры, ал Висконсин-Мэдисон үйінде бес жыл декан болды. Ол студенттерге параллельді және таратылған бағдарламалау және тілдік дизайнды зерттейді және үйретеді.

Майклды әлем оқулықтан біледі «Бағдарламалау тілінің прагматикасы», жұмыс ше «Ортақ жадты мультипроцессорларда масштабталатын синхрондау алгоритмдері» дистрибьюторлар саласындағы ең танымалдардың бірі ретінде Dijkstra сыйлығын алды. Сіз оны дәл сол алгоритмнің авторы ретінде де білуіңіз мүмкін Майкл-Скотт.

Дуг Лимен бірге ол Java кітапханаларын қуаттандыратын блокталмаған алгоритмдер мен синхронды кезектерді әзірледі. Іске асыру «қосарлы деректер құрылымдары» JavaSE 6-да өнімділікті 10 есе жақсартты ThreadPoolExecutor.

Мазмұны:

  • Ерте мансап, Рочестер университеті. Шарлотта жобасы, сілеусін тілі;
  • IEEE масштабталатын когерентті интерфейс, MCS құлыптау;
  • Үнемі өзгеретін әлемде аман қалу;
  • Оқушылар ақымақ болып бара жатыр ма? Жаһандық тенденциялар, интернационалдандыру;
  • Оқушылармен тиімді жұмыс;
  • Жаңа курстар мен кітаптарды дайындауды қалай ұстау керек;
  • Бизнес пен академия арасындағы байланыстар;
  • Идеяларды іс жүзінде жүзеге асыру. MCS, MS, CLH, JSR 166, Дуг Лимен жұмыс істеу және т.б.;
  • Транзакциялық жады;
  • Жаңа архитектуралар. Транзакциялық жадының жеңісі жақын;
  • Тұрақты жад, Optane DIMM, өте жылдам құрылғылар;
  • Келесі үлкен тренд. Қос деректер құрылымдары. Гидра.

Сұхбатты жүргізеді:

Виталий Аксенов — қазіргі уақытта IST Austria-да постдок және ITMO университетінің компьютерлік технологиялар кафедрасының мүшесі. Бәсекеге қабілетті деректер құрылымдарының теориясы мен тәжірибесі саласында зерттеулер жүргізеді. IST-те жұмыс істемес бұрын ол Париж Дидро университетінде және профессор Петр Кузнецовтың жетекшілігімен ITMO университетінде PhD дәрежесін алды.

Алексей Федоров - әзірлеушілерге арналған конференциялар ұйымдастыратын ресейлік JUG Ru Group компаниясының продюсері. Алексей 50-ден астам конференцияларды дайындауға қатысты және оның түйіндемесінде Oracle (JCK, Java Platform Group) әзірлеуші ​​инженері қызметінен бастап, Одноклассникидегі әзірлеуші ​​лауазымына дейін барлығы қамтылған.

Владимир Ситников - Netcracker компаниясының инженері. Желіні және желілік жабдықты басқару процестерін автоматтандыру үшін байланыс операторлары пайдаланатын NetCracker ОЖ өнімділігі мен ауқымдылығы бойынша он жылдық жұмыс. Java және Oracle Database өнімділік мәселелеріне қызығушылық танытады. Ресми PostgreSQL JDBC драйверінде оннан астам өнімділікті жақсартулардың авторы.

Алғашқы мансап, Рочестер университеті. Шарлотта жобасы, сілеусін тілі.

Алексей: Алдымен мен Ресейде бәріміз информатиканы, деректер туралы ғылымды және алгоритмдерді жақсы көретінімізді айтқым келді. Бұл әдепсіз. Біз бәрін оқыдық Кітап Кормен, Лейзерсон және Ривест. Сондықтан алдағы конференция, мектеп және осы сұхбаттың өзі өте танымал болуы керек. Бұл сұхбатқа студенттерден, бағдарламашылардан және қоғамдастық мүшелерінен көптеген сұрақтар алдық, сондықтан біз бұл мүмкіндік үшін өте ризамыз. Информатика АҚШ-та бірдей сүйіспеншілікке ие бола ма?

Майкл: Біздің саланың алуан түрлілігі сонша, оның көптеген бағыттары бар және ол қоғамға сан алуан түрлі әсер етеді, сондықтан сізге нақты жауап беру мен үшін қиын. Бірақ бұл соңғы 30 жыл ішінде бизнесте, өндірісте, өнерде және жалпы қоғамда орасан зор өзгерістер әкелді.

Виталий: Алыстағы нәрседен бастайық. Көптеген университеттерде белгілі бір саладағы мамандандыру сияқты нәрсе бар. Карнеги Меллон университеті үшін бұл параллель есептеулер, MIT үшін бұл криптография, роботтар және көп ағынды. Рочестер университетінде мұндай мамандық бар ма?

Майкл: Шынымды айтсам, CMU мен MIT барлық салада маманданған деп айтар едім. Біздің бөлім әрқашан жасанды интеллектке көп көңіл бөледі. Бізде жұмыс істейтін адамдардың жартысы AI немесе адам мен компьютердің өзара әрекеттесуімен айналысады - бұл үлес басқа бөлімдерге қарағанда жоғары және әрқашан солай болды. Бірақ мен университетте оқып жүргенімде AI бойынша ешқандай курстар болмады, мен бұл салада ешқашан жұмыс істемедім. Сондықтан менің бөлімше менің қатысым жоқ мәселеге маманданған. Жұбаныш, біздің кафедра үшін екінші маңызды мәселе параллельді және көп ағынды бағдарламалау, яғни менің мамандығым.

Виталий: Сіз информатикада жұмысты көп ағынды бағдарламалау саласы енді ғана пайда болған кезде бастадыңыз. Сіздің жарияланымдарыңыздың тізімі сіздің алғашқы жұмыстарыңыздың жеткілікті кең ауқымды мәселелермен айналысқанын көрсетеді: көп ағынды жүйелерде жадты басқару, бөлінген файлдық жүйелер, операциялық жүйелер. Неліктен мұндай жан-жақтылық? Сіз зерттеу қоғамдастығында өз орныңызды табуға тырысып көрдіңіз бе?

Майкл: Студент кезімде қатысқанмын Шарлотта жобасы бірінші таратылған операциялық жүйелердің бірі жасалған Висконсин университетінде. Онда мен Рафаэль Финкельмен бірге жұмыс істедім (Рафаэль Финкель) және Марвин Соломон (Марвин Соломон). Менің диссертациям таратылған жүйелерге арналған жүйелік бағдарламалық қамтамасыз ету тілін әзірлеуге арналды – қазір бәрі оны ұмытып кетті, Құдайға шүкір. Мен Lynx бағдарламалау тілін жасадым, ол еркін байланысқан таратылған операциялық жүйе үшін серверлерді жасауды жеңілдетуге арналған. Ол кезде мен негізінен операциялық жүйелермен айналысқандықтан, менің мансабым негізінен солармен байланысты болады деп ойладым. Бірақ Рочестер өте кішкентай университет болды, сондықтан ондағы әртүрлі топтар бір-бірімен өте тығыз қарым-қатынаста болды. Менімен сөйлесетін басқа оншақты операциялық жүйе адамдары болмады, сондықтан менің барлық байланыстарым мүлдем басқа салаларда жұмыс істейтін адамдармен болды. Маған бұл өте ұнады, жан-жақты спортшы болу мен үшін үлкен артықшылық. Егер біз көп ағынды деректер құрылымдары және синхрондау алгоритмдері туралы айтатын болсақ, онда мен олармен толығымен кездейсоқ жұмыс істей бастадым.

IEEE масштабталатын когерентті интерфейс, MCS құлыптауы.

Виталий: Бұл туралы біраз айтып бере аласыз ба?

Майкл: Бұл мен бәріне айтудан жалықпайтын күлкілі оқиға. Бұл конференцияда болды ASPLOS Бостонда - бұл 80-жылдардың аяғында немесе 90-жылдардың басында болды. Джон Меллор-Крамми (Джон Меллор-Крамми), факультетіміздің түлегі. Мен оны білетінмін, бірақ біз бұған дейін бірлескен зерттеу жүргізбеген едік. Мэри Вернон (Мэри ВернонВисконсин штатындағы ) Висконсин штатында жасап жатқан мультипроцессорлық жүйе туралы баяндама жасады: Висконсин мультикуб. Бұл Multicube құрылғысында Q on Sync бит деп аталатын аппараттық деңгейде синхрондау механизмі болды және кейінірек ол Q on Lock Bit деп аталды, себебі ол Колби ірімшігі сияқты естіледі, бұл сөз тіркесі. Егер сіз көп ағынды механизмдерге қызығушылық танытсаңыз, Colby ақырында IEEE Scalable Coherent Interface стандарты үшін синхрондау қозғалтқышы болғанын білетін шығарсыз. Бұл әрбір құлып ұстаушы кімнің кезегі екенін білуі үшін аппараттық деңгейде бір кэштен екіншісіне көрсеткіштер жасайтын құлыптау механизмі болды. Джон екеуміз бұл туралы естігенде, біз бір-бірімізге қарап: неге мұны аппараттық деңгейде жасаймыз? Салыстыру және ауыстыру арқылы бірдей нәрсеге қол жеткізу мүмкін емес пе? Сыныпта жатқан дәптердің бірін алып, сызып тастадық MCS блоктауы, ал Мэри баяндамасын жалғастырды. Кейіннен біз оны іске асырдық, тәжірибе жасадық, идея сәтті болып, мақаланы жарияладық. Ол кезде мен үшін бұл тақырып жай ғана көңілді алаңдату болып көрінді, содан кейін операциялық жүйелерге оралуды жоспарладым. Бірақ содан кейін сол бағыттағы тағы бір мәселе туындады және ақырында синхрондау, көп ағынды және деректер құрылымдары менің мамандығым болды. Көріп отырғаныңыздай, мұның бәрі кездейсоқ болды.

Виталий: Мен MCS блоктауымен бұрыннан таныспын, бірақ осы уақытқа дейін бұл сіздің жұмысыңыз екенін білмедім және бұл сіздің фамилияларыңыздың қысқартылған сөзі екенін түсінбедім.

Үнемі өзгеретін әлемде қалай аман қалуға болады?

Алексей: Менде бір тақырып бойынша сұрағым бар. Осыдан 30-40 жыл бұрын әртүрлі мамандықтарда еркіндік көп болатын. Егер сіз мансапты көп ағынды немесе таратылған жүйелерде бастағыңыз келсе, қош келдіңіз, егер операциялық жүйелерге кіргіңіз келсе, ешқандай проблема жоқ. Әр салада ашық сұрақтар көп, сарапшылар аз болды. Қазір тар мамандықтар пайда болды: жалпы операциялық жүйелер бойынша жай сарапшылар жоқ, жеке жүйелер бойынша мамандар бар. Көп ағынды және таратылған жүйелермен бірдей. Бірақ мәселе мынада, біздің өміріміз шексіз емес, әркім зерттеуге бірнеше онжылдықты ғана арнай алады. Бұл жаңа әлемде қалай аман қалуға болады?

Майкл: Біз бұл жағынан ерекше емеспіз, басқа облыстарда да осындай жағдай болған. Мен информатика саласында жұмыс істей бастағаным үшін бұл саланың «жасөспірім» жылдарында болғаным бақыт болды. Кейбір іргетастар қаланды, бірақ бәрі әлі жетілмеген еді. Бұл мүмкіндік жиі бола бермейді. Электротехника өте ұзақ уақыт бойы, физика одан да ұзақ, математика уақыттың басынан бері дерлік болды. Бірақ бұл енді ешкім математикада қызықты жаңалықтар ашпайды дегенді білдірмейді. Көптеген ашық мәселелер бар, бірақ сонымен бірге көп нәрсені үйрену керек. Сіз дұрыс айтасыз, қазір мамандықтар бұрынғыға қарағанда әлдеқайда көп, бірақ бұл біздің адам қызметінің көптеген басқа салаларындағыдай жағдайға тап болғанымызды білдіреді.

Алексей: Мені бұл жерде мәселенің практикалық жағы қызықтырады. Математикадан білімім бар, оқу кезінде конференцияларға жиі қатысып, түрлі ғылыми тақырыптарда жұмыс істедім. Мен аудиториядағы ешкімнің менің баяндамаларымды түсінбейтінін және сол сияқты басқа адамдардың баяндамалары да өздеріне ғана түсінікті екенін білдім. Жоғары деңгейдегі тақырыптарда олай емес, бірақ сіз бірдеңені тереңдете бастағанда аудитория сізге ілесе алмайды. Сіз мұны қалай шешесіз?

Майкл: Әрқашан сәтті бола бермейді. Мен жақында есеп дайындадым, онда мен техникалық мәліметтерге тым тереңдеп кеттім. Әңгіме өрбіген сайын тыңдармандардың көпшілігі мені түсінбейтіні белгілі болды, сондықтан мен ұшқандағы жағдайға бейімделуге тура келді. Слайдтарды өзгерту мүмкін болмады, сондықтан ол өте жақсы болмады - сондықтан, жалпы айтқанда, мен слайдтарды қолданбауға тырысамын. Жалпы, менің кеңесім - аудиторияңызды ескеріңіз. Сіз кіммен сөйлесіп жатқаныңызды, олардың білім деңгейі қандай екенін және сіздің жұмысыңызды бағалау үшін не есту керек екенін білуіңіз керек.

Виталий: Бұл лекция не туралы болғаны туралы түсініктеме бере аласыз ба?

Майкл: Шынымды айтсам, сөз болып отырған адамдарды жасырын қалдыру үшін бұл тақырыпты ашпағанды ​​жөн көрдім. Мәселе мынада: біз өзіміз жұмыс істеп жатқан мәселенің қыр-сырына жиі тым тереңдеп кетеміз, сондықтан әңгіменің басында мәселенің неліктен қызықты және маңызды екенін және оның мәселеге қалай қатысы барын түсіндіру қиынға соғады. аудитория бұрыннан біледі. Менің байқауымша, студенттерге бұл дағдыны меңгеру қиынға соғады. Бұл да менің соңғы баяндамамның осал тұсы болды. Тиісті құрылымдалған есеп ең басынан бастап аудиториямен байланыс тауып, оларға мәселенің нақты не екенін және оның бұрыннан белгілі тақырыптарға қалай қатысы барын түсіндіруі керек. Бұл кіріспе қаншалықты техникалық екені аудиторияға байланысты. Егер ол толығымен түрлі-түсті болса, онда есеп көп сатылы болуы мүмкін. Кіріспе барлығына қол жетімді болуы керек және соңында шығарма сізге ілесе алмауы мүмкін, бірақ сіздің салаңызбен салыстырмалы түрде таныс адамдар оны анықтай алады.

Оқушылар ақымақ болып бара жатыр ма? Жаһандық тенденциялар, интернационалдандыру.

Алексей: Сіз бірнеше ондаған жылдар бойы студенттерді бақылап келесіз. Он жылдан онжылдыққа немесе жылдан жылға студенттер ақымақ немесе ақылды болып бара жатыр ма? Ресейде профессорлар студенттердің жыл сайын ақымақ болып бара жатқанына үнемі шағымданады және бұл туралы не істеу керек екені белгісіз.

Майкл: Шынымен де біз, қариялардан көп жағымсыз сөздер естисіз. Санадан тыс, біз студенттерден бізде бар 30 жылдық тәжірибені сіңіреді деп күтуге бейім. Менің түсінігім 1985 жылғыдан тереңірек болса, неге студенттерде жоқ? Жастары 20-да болғандықтан шығар, сіз қалай ойлайсыз? Менің ойымша, соңғы онжылдықтардағы ең маңызды өзгерістер демографиялық құрамда болды: қазір бізде канадалықтарды қоспағанда, халықаралық студенттердің саны айтарлықтай көп. Бұрын канадалықтар көп болатын, өйткені біз Канада шекарасына өте жақынбыз және ол жақтағы студенттер демалыс күндері үйлеріне бара алады. Бірақ қазір Канадада көптеген жақсы университеттер бар және канадалықтар осында оқуды қалайды; олардың айтарлықтай азы АҚШ-қа келеді.

Алексей: Қалай ойлайсыз, бұл жергілікті тренд пе, әлде жаһандық үрдіс пе?

Майкл: Кім екені есімде жоқ, бірақ біреу дүние тегіс деді. Біздің сала әлдеқайда халықаралық болды. ACM конференциялары Бұрын олар тек Америка Құрама Штаттарында өткізілсе, кейін олар 4 жылда бір рет басқа елдерде өткізуді шешті, ал қазір олар бүкіл әлемде өткізіледі. Бұл өзгерістер одан да көп әсер етті IEEE, өйткені ол әрқашан ACM-ге қарағанда халықаралық ұйым болды. Қытайдан, Үндістаннан, Ресейден, Германиядан және басқа да көптеген елдерден бағдарлама кафедралары бар, өйткені қазір барлық жерде көп нәрсе жүріп жатыр.

Алексей: Бірақ мұндай интернационалдандырудың жағымсыз жақтары бар шығар?

Майкл: Мен барлық келеңсіз жағдайлар технологияға емес, саясатқа қатысты дер едім. Бір кездері басты мәселе АҚШ-тың дүние жүзіндегі елдерден ең ақылды және ең талантты адамдарды ұрлап жатқаны болды. Ал енді басты мәселе – виза мен иммиграция төңірегінде түрлі елдер арасындағы саяси ойындар.

Алексей: Яғни, кедергілер және сол сияқты нәрселер. Ол түсінікті.

Владимир: Өз басым, оқушыларға жаңа пәнді оқытқанда қандай тәсілді ұстанатыныңыз мені қызықтырады. Әртүрлі нұсқалар бар: сіз ең алдымен оларды жаңа нәрсені көруге шабыттандыруға тырысуға болады немесе белгілі бір технологияның қалай жұмыс істейтініне көбірек назар аудара аласыз. Сізге не ұнайды?

Оқушылармен тиімді жұмыс

Алексей: Ал бірінші мен екінші арасындағы қарғыс атқан теңгерімді қалай табуға болады?

Майкл: Мәселе мынада, сабақтар әрқашан мен қалағандай бола бермейді. Мен әдетте студенттерге оқу материалын алдын ала беремін, сонда олар оны тереңірек оқып, мүмкіндігінше түсінеді және түсінбеген жерлері бойынша сұрақтар құрастырады. Содан кейін сабақта сіз ең қиын сәттерге назар аударып, оларды бірге зерттей аласыз. Осылай сабақ бергенді ұнатамын. Бірақ қазір студенттерге түсетін жүктемені ескере отырып, мен олардың алдын ала дайындалуын үнемі тексере алмаймын. Нәтижесінде материалды жалпы қайталауға өзіңіз қалағаныңыздан әлдеқайда көп уақыт бөлуге тура келеді. Осыған қарамастан мен сабақтарымызды интерактивті етіп өткізуге тырысамын. Әйтпесе, студенттер үйде көре алатын бейнені түсіру оңайырақ. Тікелей сабақтардың мәні - адамдардың өзара әрекеттесуі. Сабақта мен слайдтан гөрі бор мен тақтаны пайдаланғанды ​​ұнатамын, тек диаграмманы тақтада бейнелеу үшін тым күрделі жағдайларды қоспағанда. Осының арқасында мен қатаң сабақ жоспарын ұстанудың қажеті жоқ. Материалды берудің қатаң тәртібі болмағандықтан, бұл маған келіп жатқан сұрақтарға байланысты оны аудиторияға бейімдеуге мүмкіндік береді. Жалпы, мен ұсынатын материал маған қойылатын сұрақтарға байланысты болуы үшін сабақтарды мүмкіндігінше интерактивті етуге тырысамын.

Владимир: Бұл тамаша. Менің тәжірибемде тыңдаушыларды сұрақ қоюға мәжбүрлеу өте қиын. Қандай ақымақ болсын, ақылды болсын, кез келген сұрақты алдын ала сұрасаңыз да, олар бәрібір үнсіз. Сіз мұны қалай шешесіз?

Майкл: Күлесіз, бірақ ұзақ үнсіз тұрсаңыз, ерте ме, кеш пе бәрі ыңғайсызданып, біреу сұрақ қояды. Немесе адамдардың жаңа айтылғанды ​​түсінетінін анықтау үшін иә немесе жоқ жауабы бар қарапайым техникалық сұрақ қоюға болады. Мысалы, жоғарыдағы мысалда деректер жарысы бар ма? Кім осылай ойлайды? Кім ойламайды? Кім ештеңені түсінбейді, өйткені барлығы қолдың жартысы ғана көтерілді?

Виталий: Егер сіз қате жауап берсеңіз, сіз сабақтан шығарыласыз :)

Майкл: Егер сіз ештеңеге жауап бермесеңіз, сұрақ қоюыңыз керек. Мен жаңа қойған сұраққа жауап беру үшін студент нені білуі керек екенін түсінуім керек. Маған оларға көмектесулері керек. Олар мәселені түсінуі үшін мен оларға бейімделуге дайынмын. Бірақ олардың басында не болып жатқанын білмесем, мен мұны істей алмаймын. Егер сіз студенттерге ұзақ уақыт тыныштық бермесеңіз, кейде соңында олар дұрыс сұрақтар қояды, яғни студенттердің басында не болып жатқанын көруге мүмкіндік береді. 

Алексей: Бұл сұрақтар кейде сіз бұрын ойланбаған идеяларға әкеледі ме? Олар күтпеген нәрсе ме? Олар мәселеге жаңа көзқараспен қарауға мүмкіндік бере ме?

Майкл: Материалды берудің жаңа тәсілін ашатын сұрақтар бар. Мен айтуды жоспарламаған қызықты мәселелерге әкелетін сұрақтар жиі кездеседі. Студенттер маған мұндай жағдайда тақырыптан шығып кетуге бейімділігім бар екенін жиі айтады. Және, олардың айтуынша, көбінесе бұл сабақтың ең қызықты бөлігі. Студенттер өте сирек, тек бірнеше рет зерттеулерде жаңа бағытты тудыратын және мақалаға айналған сұрақтар қойды. Бұл сабақ кезінде емес, студенттермен әңгімелесуде жиі орын алады, бірақ кейде сабақ кезінде де болады. 

Алексей: Сонда студенттер сізге сұрақтар қойды, солардың негізінде мақала жариялауға болады ма?

Майкл: Иә. 

Виталий: Сіз студенттермен қаншалықты жиі сөйлесесіз? Олар қашан сабақта өткеннен көбірек білгісі келеді?

Майкл: Магистранттарыммен - әрқашан. Менде олардың шамамен 5 немесе 6-сы бар және біз олармен үнемі бір нәрсені талқылаймыз. Менің сабақтарыма жай ғана қатысатын студенттермен мұндай әңгімелер өте жиі емес. Мен мұның жиі болғанын қалаймын. Олар жұмыс уақытында факультетке келуге қорқады деп ойлаймын. Әр семестр сайын кейбір студенттер осы психологиялық кедергіні жеңе алады және олармен сабақтан кейін сөйлесу әрқашан өте қызықты. Рас, егер студенттердің барлығы осындай батыл болса, менің уақытым аз болар еді. Сондықтан, бәлкім, бәрі дұрыс жұмыс істейді. 

Виталий: Студенттермен тіл табысуға қалай уақыт табасыз? Менің білуімше, АҚШ-та мұғалімдердің жұмысы көп – грантқа түсу және т.б. 

Майкл: Шынымды айтсам, студенттермен жұмыс істеу – менің жұмысымның маған ең ұнайтын аспектісі. Сондықтан менде бұған мотивация жеткілікті. Мен кеңседе өткізетін уақыттың көп бөлігін әртүрлі кездесулерге жұмсаймын. Қазір жаз мезгілі, сондықтан менің жұмыс кестесі бос емес, бірақ оқу жылында, күн сайын 9-дан 17-ге дейін менде барлығы бар. Зерттеу жұмысы, шолулар, гранттар – мұның барлығына тек кештер мен демалыс күндері ғана бар. 

Жаңа курстар мен кітаптардың дайындығына қалай жетуге болады.

Алексей: Қазіргі уақытта сіз ұзақ уақыт бойы оқытып жүрген кез келген курстарды оқытуды жалғастырып жатырсыз ба? Информатикаға кіріспе сияқты нәрсе.

Майкл: Бұл жерде бірінші ойға келетін нәрсе - бағдарламалау тілдері курсы. 

Алексей: Бұл курстың бүгінгі нұсқасы 10, 20, 30 жыл бұрынғы нұсқасынан қаншалықты ерекшеленеді? Мүмкін бұл жерде қызықтырақ нәрсе белгілі бір курстың егжей-тегжейлері емес, жалпы үрдістер.

Майкл: Бағдарламалау тілдері бойынша курсым мен оны жасаған кезде біршама ерекше болды. Мен оны 1980 жылдардың соңында әріптесім Дуг Болдуиннің орнына оқи бастадым.Даг Болдуин). Курстың тақырыбы менің мамандығыммен ғана байланысты болды, бірақ ол кеткен кезде мен курсты оқытуға ең жақсы үміткер болдым. Маған сол кездегі оқулықтардың ешқайсысы ұнамады, сондықтан мен осы курстың оқулығын өзім жаздым. (Редакцияның ескертуі: біз кітап туралы айтып отырмыз «Бағдарламалау тілінің прагматикасы») Қазір әлемнің 200-ден астам университетінде қолданылады. Менің көзқарасым әдеттен тыс, ол тілді жобалау мен жүзеге асыру мәселелерін әдейі араластырады және осы аспектілердің барлық мүмкін салалардағы өзара әрекеттесуіне үлкен көңіл бөледі. Негізгі тәсіл көптеген негізгі ұғымдар сияқты өзгеріссіз қалды: абстракциялар, аттар кеңістігі, модульдік, типтер. Бірақ бұл ұғымдарды көрсететін тілдердің жиынтығы толығымен өзгерді. Курс алғаш құрылған кезде Паскаль тілінде көптеген мысалдар болды, бірақ бүгінгі күні менің көптеген студенттерім бұл тіл туралы тіпті естімеген. Бірақ олар Swift, Go, Rust тілдерін біледі, сондықтан мен бүгін қолданылатын тілдер туралы айтуым керек. Сондай-ақ, студенттер қазір сценарий тілдерін жақсы біледі, бірақ мен бұл курсты оқыта бастағанда, бәрі құрастырылған тілдер туралы болды. Қазір бізге Python, Ruby және тіпті Perl туралы көптеген материалдар қажет, өйткені қазіргі уақытта код осылай жазылады және бұл тілдерде, соның ішінде тіл дизайны саласында көптеген қызықты нәрселер болып жатыр. 

Виталий: Онда менің келесі сұрағым алдыңғы сұраққа қатысты болады. Бұл салада қалай әрекет ету керек? Менің ойымша, мұндай курсты жаңарту көп жұмысты талап етеді - жаңа тілдерді түсіну, негізгі идеяларды түсіну керек. Мұны қалай істейсіз?

Майкл: Мен әрқашан 100% жетістікке жетемін деп мақтана алмаймын. Бірақ мен көбіне басқалардың істегенін істеймін – интернетті оқимын. Егер мен Rustты түсінгім келсе, мен оны Google-ға енгіземін, Mozilla бетіне өтіп, сол жерде жарияланған нұсқаулықты оқимын. Бұл коммерциялық дамуда болатын нәрселердің бір бөлігі. Егер ғылым туралы айтатын болсақ, онда сіз негізгі конференциялардағы баяндамаларды орындауыңыз керек. 

Бизнес пен академия арасындағы байланыс

Виталий: Кәсіпкерлік пен ғылыми зерттеулердің байланысына тоқталайық. Жұмыстар тізімінде мен кэш когеренттілігі туралы бірнеше мақала таптым. Мен кэш сәйкестігі алгоритмдері жарияланған кезде тұрақсыз болғанын түсінемін бе? Немесе жеткілікті түрде таралмаған. Сіздің идеяларыңыз тәжірибеде қаншалықты жиі болды?

Майкл: Мен қай басылымдар туралы айтып жатқаныңызға сенімді емеспін. Мен студенттерім Билл Болоскимен біраз жұмыс жасадым (Уильям Болоский) және Леонидас Контотанассис (Леонид Контотанассис) 1990 жылдардың басында Нейман машиналарының жадысын басқару бойынша. Ол кезде бизнесте мультипроцессорлық жүйені қалай дұрыс жасау керектігі туралы әлі түсінік болмады: аппараттық деңгейде қашықтағы жадқа қол жеткізу үшін қолдауды құру керек пе, жадты тарату керек пе, кэшті жүктеуге бола ма? қашықтағы жад немесе операциялық бөлмеде беттерді жылжыту қажет пе? Билл мен Леонидас екеуі де осы салада жұмыс істеді және кэшті қашықтан жүктеусіз әдістерді зерттеді. Бұл кэш когеренттілігімен тікелей байланысты емес еді, бірақ ол әлі де NUMA жадты басқару бойынша жұмыс болды, содан кейін қазіргі операциялық жүйелерде бетті орналастырудың заманауи тәсілдері осыдан өсті. Жалпы, Билл мен Леонидас маңызды жұмыстарды атқарды, бірақ бұл салада ең ықпалды болмаса да - сол уақытта сол нәрседе басқа да көптеген адамдар жұмыс істеді. Кейінірек мен аппараттық транзакциялық жады контекстінде кэш когеренттілігіне қатысты тақырыппен жұмыс істедім. Мен осы мәселе бойынша жұмыс істеген топ бірнеше патент алды. Олардың артында өте қызықты идеялар бар, бірақ олар іс жүзінде жүзеге асады деп ойламаймын. Қалай болғанда да, олардың табыстылығын бағалау мен үшін қиын. 

Алексей: Осыған байланысты жеке сұрақ: сіздің идеяларыңыздың жүзеге асуы сіз үшін қаншалықты маңызды? Әлде бұл туралы ойламайсың ба?

Майкл: Маған бұл сұрақты факультетке қосылғысы келетін басқа адамдармен, талапкерлермен немесе кандидаттармен сұхбат кезінде қойған ұнайды. Бұл сұраққа дұрыс жауап жоқ деп ойлаймын. Керемет істермен айналысатын адамдардың мотивациялары әртүрлі болуы мүмкін. Маған проблемалар қызықтырады, өйткені мен оларды практикалық пайдасы үшін емес, жеке өзім қызықты деп санаймын. Бірақ екінші жағынан, қандай да бір қызықты нәрсе әлі де қосымшаны тапқан кезде, бұл маған өте ұнайды. Сондықтан бұл жерде оңай емес. Бірақ менің жұмысымның басында мені әлі де әлемдегі түпкілікті пайдалану идеясы емес, идеяның үйлесімі және оны зерттеп, одан не шығатынын көруге деген ұмтылыс жетелейді. Ақыр соңында практикалық нәтиже берсе, тамаша. 

Алексей: Сіздің біліміңіз бен тәжірибеңіздің арқасында сіз басқалардың идеяларының құндылығын басқаларға қарағанда жақсырақ бағалай аласыз. Сіз оларды салыстырып, қайсысымен жақсы жұмыс істейтінін анықтай аласыз. Қазіргі уақытта Intel сияқты ірі өндірушілер іс жүзінде қолданатын нәрселер туралы пікіріңіз бар екеніне сенімдімін. Сіздің көзқарасыңызша, бұл компаниялардың ұстанып отырған бағыты қаншалықты дұрыс?

Майкл: Тәжірибе әрқашан коммерциялық табысты болуы мүмкін, яғни пайда әкелетін нәрсенің айналасында айналады және бұл туралы басқа біреуден сұрағаныңыз жөн. Менің жұмысым негізінен жарияланымдармен аяқталады, ал операциялық жүйелер саласында олар өнімділік көрсеткіштері бойынша бағаланады: жылдамдық, энергия тұтыну, код өлшемі. Бірақ маған әрқашан бұл эмпирикалық нәтижелер мақалаларға жариялануы үшін ғана қосылады және адамдардың еңбекке деген шынайы мотивтері эстетикалық болып табылады. Зерттеушілер шешімдерді көркемдік тұрғыдан бағалайды, олар идеялардың қаншалықты талғампаз екеніне мән береді және олар бар тәсілдерден жақсырақ нәрсе жасауға тырысады. Зерттеушілерді жеке, субъективті, эстетикалық мотивтер жетелейді. Бірақ сіз бұл туралы мақаланың өзінде жаза алмайсыз, бұл бағдарламалар комитеті үшін дәлел емес. Бақытымызға орай, талғампаз шешімдер жиі тез және арзан. Мен және оншақты әріптестерім осы тақырыпты шамамен 15 жыл бұрын талқылап, бұл туралы мақала жазуды аяқтадық. Менің ойымша, сіз оны қазір де таба аласыз, ол аталады «Жүйелік зерттеулерді қалай бағалауға болады» немесе сол сияқты, оннан астам авторы бар. Бұл мен бірге автор болған жалғыз мақала Саша Федорова, сондықтан менің жарияланымдар тізімімнен оның атын іздесеңіз, сізге қажет нәрсені табасыз. Ол жүйелік зерттеулерді бағалау және талғампаздықтың қаншалықты маңызды екендігі туралы айтады. 

Алексей: Демек, ғылым мен бизнесте жақсы деп саналатын стандарттың арасында айырмашылық бар. Ғылым өнімділікті, қуат тұтынуды, TDP, іске асырудың қарапайымдылығын және т.б. бағалайды. Сіздің университетте осындай зерттеу түрін жүргізуге мүмкіндігіңіз бар ма? Сізде эксперименттер жүргізуге болатын әртүрлі машиналары мен әртүрлі архитектурасы бар зертхана бар ма?

Майкл: Иә, біздің бөлімде неше түрлі қызықты машиналар бар. Көбінесе олар кішкентай, бізде шағын кластер және әртүрлі үдеткіштері бар көптеген мультипроцессорлық жүйелер бар. Сонымен қатар, кампуста бірнеше ондаған түрлі пәндердің ғалымдарына қызмет көрсететін үлкен есептеу орталығы бар. Оның мыңға жуық түйіні мен жиырма мың ядросы бар, барлығы Linux жүйесінде. Қажет болса, сіз әрқашан AWS сатып ала аласыз. Сондықтан бізде аппараттық құралдарға айтарлықтай шектеулер жоқ. 

Алексей: Осыдан отыз жыл бұрын қандай болды? Сонда қиындықтар болды ма?

Майкл: Ол кезде сәл басқаша болды. 1980 жылдардың ортасы мен аяғында ғылымда есептеуіш ресурстар жетіспейді деп есептелді. Бұл жағдайды түзету үшін Ұлттық ғылым қоры (Ұлттық ғылым қоры) үйлестірілген эксперименттік зерттеулер бағдарламасын жасады (Coordinated Experimental Research, CER). Бағдарламаның миссиясы информатика бөлімдерін есептеуіш инфрақұрылыммен қамтамасыз ету болды және ол айтарлықтай өзгерістерге қол жеткізді. Ол берген ақшаға біз Рочестер университетінде 1984 жылы 128 түйінді BBN Butterfly сатып алдық, бұл мен келгенге дейін бір жыл болды. Ол кезде ол ортақ жады бар әлемдегі ең үлкен мультипроцессорлық жүйе болды. Оның әрқайсысы жеке аналық платада болатын 128 процессоры болды және төрт тірекке ие болды. Әрбір процессорда бір мегабайт жады болды, 128 мегабайт оперативті жады ол кезде елестету мүмкін емес еді. Бұл машинада біз бірінші рет MCS құлыптауын іске асырдық. 

Алексей: Сонымен, егер мен сізді дұрыс түсінсем, онда қазіргі уақытта аппараттық құралға қатысты мәселе шешілді ме? 

Майкл: Жалпы, иә. Бірнеше ескертулер бар: біріншіден, егер сіз чип деңгейінде компьютер архитектурасын жасап жатсаңыз, оны академиялық ортада жасау қиын, өйткені бизнесте мұны істеу үшін әлдеқайда жақсы құралдар бар. Егер сізге 10 нанометрден аз нәрсе қажет болса, оны басқа біреуден тапсырыс беруге тура келеді. Бұл салада Intel-де зерттеуші болу әлдеқайда оңай. Егер сіз чиптердегі немесе қатты күйдегі жадтағы оптикалық байланыстармен жұмыс істеп жатсаңыз, бизнесте әлі ғылымда жоқ технологияларды табасыз, сондықтан сізге одақ құру керек. Мысалы, Стивен Свонсон (Стивен Свонсон) құрылды мұндай серіктестік жадының жаңа технологиялары үшін. Бұл пішін әрқашан жұмыс істемейді, бірақ кейбір жағдайларда ол өте сәтті болуы мүмкін. Сонымен қатар, ғылымда ең қуатты есептеу жүйелерін жасау қиынырақ. Қазіргі уақытта АҚШ, Жапония және Қытайдағы ең ірі суперкомпьютер жобаларының барлығы бизнеске бағытталған. 

Идеяларды іс жүзінде жүзеге асыру. MCS, MS, CLH, JSR 166, Дуг Лимен жұмыс істеу және т.б.

Виталий: Синхрондау алгоритмдерімен жұмысты қалай бастағаныңыз туралы айтып өттіңіз. Сізде өте танымал екі мақала бар MCS блоктауы и Майкл-Скотт кезегі (MS), олар белгілі бір мағынада Java тілінде жүзеге асырылды. (Редактордың ескертуі: барлық жарияланымдарды көруге болады байланыс). Онда бұл блоктау кейбір өзгерістермен жүзеге асырылды және ол шықты CLH құлпы, және кезек жоспарланғандай орындалды. Бірақ сіздің мақалаларыңыздың жариялануы мен олардың іс жүзінде қолданылуының арасында көп жылдар өтті. 

Алексей: Кезек болған жағдайда 10 жылдай көрінеді.

Майкл: Бұл мүмкіндіктер Java стандартты кітапханасында пайда болғанға дейін?

Виталий: Иә. Сіз мұны істеу үшін не істедіңіз? Әлде олар ештеңе істемеді ме?

Майкл: Мен сізге MS Queue бағдарламасының Java 5-ке қалай енгенін айта аламын. Ол шыққанға дейін бірнеше жыл бұрын мен Sun Microsystems компаниясында Марк Мойерс тобымен Бостон маңындағы зертханасында жұмыс істедім. Ол көп ағындағы қызықты есептермен жұмыс істейтін өзі білетін адамдар үшін семинар ұйымдастырды, өйткені ол олардың компаниясына сата алатын тақырыптарды тапқысы келді. Міне, мен Дуг Лиді алғаш рет кездестірдім. Даг екеуміз және Саннан келген 25-ке жуық адам Дагтың презентациясын талқыладық JSR 166, ол кейінірек java.util.concurrent болды. Жолда Дуг MS кезегін пайдаланғысы келетінін айтты, бірақ ол үшін интерфейс үшін кезекте тұрған элементтердің санына есептегіш қажет болды. Яғни, бұл атомдық, дәл және жылдам бөлек әдіспен жасалуы керек еді. Мен жай ғана түйіндерге сериялық нөмірлерді қосуды, бірінші және соңғы түйіннің нөмірін алып, екіншісін алып тастауды ұсындым. Даг басын тырнап, «неге болмасқа» деді де, солай істеді. Біз бұл тәсілді кітапханада енгізуді талқыладық, бірақ Даг жұмыстың көп бөлігін өзі жасады. Нәтижесінде ол Java тілінде тамаша көп ағынды қолдауды орната алды. 

Алексей: Сонымен, егер мен дұрыс түсінсем, .size() әдісі стандартты кезек интерфейсінің бөлігі болуы керек және оның алгоритмдік күрделілігі O(1) болуы керек еді?

Майкл: Иә, және оған қосымша бөлек есептегіш қажет.

Алексей: Себебі Java-да .size() әдісін шақырсаңыз, нәтиже жинақтың нақты өлшеміне негізделмей, дереу қол жетімді болады деп күтілуде. Түсінікті, рахмет.

Майкл: Бірнеше жылдан кейін мен студентім Билл Шерермен қосарлы деректер құрылымдарында жұмыс істедім - шын мәнінде, мен бұл туралы айтатын боламын. Гидра туралы есеп. Даг бізге келіп, оларды Java Executor Framework жүйесінде пайдалана алатынын айтты. Биллмен бірге олар әділ және әділетсіз кезек деп аталатын екі іске асыруды жасады. Мен нақты кодты жазуға қатыспасам да, оларға осы жоба бойынша кеңес бердім. Нәтижесінде орындаушылар жылдамдығы айтарлықтай артты. 

Владимир: Алгоритмдердің дұрыс емес орындалуын немесе жаңа мүмкіндіктерді қосу сұрауларын кездестірдіңіз бе? Жалпы алғанда, практика теориямен сәйкес келуі керек, бірақ олар жиі ерекшеленеді. Алгоритмді жаздыңыз делік, қағазда ол жұмыс істейді, бірақ іске асыруға қатысқан адамдар сізден алгоритмнің қосымша мүмкіндіктерін немесе қандай да бір түзетулерін сұрай бастады. Сізде осындай жағдайлар болды ма?

Майкл: Маған біреу келіп, «оны қалай жүзеге асыруға болады» деп сұраған жалғыз мысал, мен айтқан Дагтың сұрағы болды. Бірақ практикалық қажеттіліктерге сәйкес қызықты өзгерістер енгізілген бірнеше жағдайлар болды. Мысалы, IBM компаниясының K42 тобы MCS құлпын түрлендірді және оны стандартты интерфейске айналдырды, осылайша кезек түйінін алу және шығару процедураларына алға-артқа өткізудің қажеті жоқ. Осы стандартты интерфейстің арқасында теорияда әдемі идея практикада жұмыс істей бастады. Бір қызығы, олар бұл туралы ешқашан мақала жарияламады және патент алғанымен, кейінірек одан бас тартты. Идея керемет болды, мен бұл туралы мүмкіндігінше айтуға тырысамын. 

Адамдар мен жариялаған алгоритмдерге жақсартулар жасаған басқа да жағдайлар болды. Мысалы, MS кезегінде екі сатылы орнату механизмі бар, бұл кезектің маңызды жолында екі CAS бар екенін білдіреді. Ескі көліктерде CAS өте қымбат болды. Intel және басқа өндірушілер оларды жақында өте жақсы оңтайландырды, бірақ бір кездері бұл 30 циклдік нұсқаулар болды, сондықтан маңызды жолда біреуден көп болуы қажет емес. Нәтижесінде MS кезегіне ұқсас, бірақ критикалық жолда бір ғана атомдық операциясы бар басқа кезек әзірленді. Бұған белгілі бір уақыт аралығында операция O(1) емес, O(n) уақытын алуы мүмкін болғандықтан қол жеткізілді. Бұл екіталай еді, бірақ мүмкін. Бұл белгілі бір сәттерде алгоритм кезекті басынан бастап осы кезектегі позицияға дейін өтуіне байланысты болды. Жалпы, алгоритм өте сәтті болып шықты. Менің білуімше, ол өте кең қолданылмайды, ішінара атомдық операциялар бұрынғыға қарағанда әлдеқайда аз ресурстарды қажет етеді. Бірақ идея керемет болды. Сондай-ақ маған Oracle-дан Дэйв Дайстың жұмысы қатты ұнайды. Оның барлығы өте практикалық және ол темірді өте ақылды пайдаланады. Оның NUMA-қабылданатын синхрондау алгоритмдерінің және көп ағынды деректер құрылымдарының көпшілігінде қолы болды. 

Владимир: Алгоритмдерді жазғанда немесе оқушыларды оқытқанда жұмысыңыздың нәтижесі бірден көрінбейді. Қауымдастыққа, айталық, жаңа мақаламен танысу үшін біраз уақыт қажет. Жаңа алгоритм қолданбаны бірден таба алмайды. 

Майкл: Мақала маңызды ма, жоқ па, бұл бірден анық емес. Конференцияларда марапаттарға ие болған мақалаларды зерттеу қызықты болар еді деп ойлаймын. Яғни, бір уақытта бағдарлама комитеттеріндегі адамдар ең жақсы деп есептеген мақалаларды қараңыз. Сіз 10, 20, 25 жылдан кейін бұл мақалалардың қаншалықты ықпалды болғанын сілтемелер саны мен бизнеске әсері бойынша есептеуге тырысуыңыз керек. Мен екеуінің арасында күшті корреляция болатынына күмәнданамын. Бұл нөлге тең болмайды, бірақ ол біз қалағаннан әлдеқайда әлсіз болуы мүмкін. Көптеген идеялар кең таралғанға дейін ұзақ уақыт талап етілмейді. Мысалы, транзакциялық жадты алайық. Түпнұсқа мақала жарияланған сәттен бастап адамдар онымен шын мәнінде машиналар жасай бастағанға дейін 10 жылдан астам уақыт өтті. Ал коммерциялық өнімдерде бұл жадтың пайда болуына дейін - және барлығы 20. Өте ұзақ уақыт бойы ешкім мақалаға назар аудармады, содан кейін оған сілтемелер саны күрт өсті. Мұны алдын ала болжау қиын болар еді. Екінші жағынан, кейде идеялар бірден жүзеге асады. Бірнеше жыл бұрын мен Джо Израелевицпен DISC үшін жұмыс жаздым, ол жұмыс істеп тұрған компьютер істен шыққаннан кейін пайдалануға болатын тұрақты деректер құрылымдары үшін жарамдылықтың жаңа ресми анықтамасын ұсынды. Мақала басынан ұнады, бірақ ол мен күткеннен әлдеқайда танымал болды. Оны бірнеше түрлі топтар қолданды және ақырында табандылық құрылымдарының стандартты анықтамасына айналды. Бұл, әрине, жақсы.

Владимир: Бағалау үшін қолданылатын әдістер бар ма? Сіз өз мақалаларыңызды және студенттеріңізді бағалауға тырысасыз ба? Сіз оқытқан адам дұрыс бағытта келе ме, жоқ па дегенге келсек.

Майкл: Басқалар сияқты мен де қазіргі уақытта не істеп жатқаныма көбірек көңіл бөлемін. Тағы да, басқалар сияқты, мен Google Scholar қолданбасын ара-тұра тексеріп тұрамын, бұл менің бұрынғы мақалаларыма сілтеме жасалып жатқанын білу үшін, бірақ бұл қызық емес. Көбінесе мен қазір шәкірттерімнің не істеп жатқанымен айналысамын. Ағымдағы жұмысты бағалауға келетін болсақ, оның бір бөлігі эстетикалық ойлар, ненің талғампаз және ненің емес. Ал күнделікті деңгейде ашық сұрақтар үлкен рөл атқарады. Мысалы, оқушы маған қандай да бір нәтижелердің графигін алып келеді, ал біз графиктің қандай да бір оғаш мінез-құлқы қайдан шыққанын түсінуге тырысамыз. Жалпы, біз өз жұмысымызда әлі түсінбейтін нәрселерді түсінуге тырысамыз. 

Транзакциялық жады

Виталий: Мүмкін біз транзакциялық жады туралы аздап айта аламыз ба?

Майкл: Меніңше, аз да болса айта кеткен жөн, өйткені мен оған көп күш жұмсадым. Бұл менің басқаларға қарағанда көбірек жарияланатын тақырып. Бірақ сонымен бірге, бір қызығы, мен транзакциялық жадыға әрқашан күмәнмен қарайтынмын. Меніңше, Херлихи мен Мосстың мақаласы (М. Херлихи, Дж. Е. Б. Мосс) өз уақытынан бұрын жарық көрді. 1990 жылдардың басында олар транзакциялық жад дарынды бағдарламашыларға көп ағынды деректер құрылымдарында жұмыс істеуге көмектесе алады, осылайша бұл құрылымдарды қарапайым бағдарламашылар кітапхана ретінде пайдалана алады деп ұсынды. Яғни, бұл Дуг Лиге JSR 166 жасауда көмек болар еді. Бірақ транзакциялық жады көп ағынды бағдарламалауды жеңілдетуге арналмаған. Бірақ дәл осылай 2000-шы жылдардың басында кең тараған кезде қабылдана бастады. Ол параллельді бағдарламалау мәселесін шешу тәсілі ретінде жарнамаланды. Бұл тәсіл маған әрқашан үмітсіз болып көрінді. Транзакциялық жады тек параллель деректер құрылымдарын жазуды жеңілдете алады. Менің ойымша, бұл оның қол жеткізген нәрсесі. 

Көп ағынды кодты жазудың қиындығы туралы

Алексей: Өте қызық. Кәдімгі бағдарламашылар мен көп ағынды кодты жаза алатындар арасында белгілі бір кедергі бар сияқты. Өткен жылы мен кейбір алгоритмдік құрылымды жүзеге асыратын адамдармен бірнеше рет сөйлестім. Мысалы, Мартин Томсонмен, сондай-ақ көп ағынды кітапханаларда жұмыс істейтін бағдарламашылармен. (Редактордың ескертуі: Мартин Томпсон - өте танымал әзірлеуші, деп жазды ол Үзілісші и Аэрон. Және оның да бар есеп біздің Joker 2015 конференциясында, бейне жазба YouTube сайтында қолжетімді. Ол бірдей ашылды осы конференция негізгі жазба сондай-ақ қол жетімді). Олардың айтуынша, басты мәселе - алгоритмдерді жылдам және оңай пайдалану. Яғни, олар осы кедергіден өтіп, осы салаға барынша көп адамдарды тартуға тырысуда. Сіз бұл туралы не ойлайсыз?

Майкл: Бұл көп ағынның негізгі мәселесі: жүйенің күрделілігін арттырмай, жоғары өнімділікке қалай жетуге болады. 

Алексей: Өйткені олар күрделіліктен аулақ болуға тырысқанда, алгоритм әмбебап болып қалады.

Майкл: Мұндағы кілт дұрыс жобаланған абстракциялар. Менің ойымша, бұл жалпы компьютерлік жүйелер үшін өріс ретінде ең бастысы болып табылады. Батлер Лэмпсон бұл терминді қолданғанды ​​ұнатады және ол бізді «абстракциялардың саудагерлері» деп атайды. Қарапайым технологиялар бүгінде жоқ. Біз қолданатын процессорларда 10 миллиард транзистор бар - қарапайымдылық сөзсіз. Сонымен қатар, ISA процессорға қарағанда әлдеқайда қарапайым, өйткені біз оны жоғары өнімділікпен және салыстырмалы түрде қарапайым интерфейспен қамтамасыз ету үшін өте ұзақ уақыт жұмыс істедік. Бірақ онымен де бәрі тегіс емес. Дәл осындай мәселе қазір нарықта пайда болған үдеткіштерге қатысты. Сұрақтар туындайды - GPU үшін дұрыс интерфейсті қалай жасауға болады, шифрлау механизмі, қысу, қайта кодтау механизмі, сызықтық алгебра механизмі немесе тіпті икемді FPGA. Құралды пайдалануды жеңілдететін және күрделілікті жасыратын интерфейсті қалай жасауға болады? Ол одан құтылмайды, бірақ оны қарапайым бағдарламашыдан жасырады. 

Алексей: Менің түсінуімше, абстракцияларды түсінуде бізде әлі де кедергі бар. Жад үлгісін алайық, ғылым мен техниканың даму сатысында бұл негізгі абстракциялардың бірі. Оның арқасында барлық программистер екі топқа бөлінеді: үлкен бөлігі - оны түсінбейтіндер, ал аз бөлігі - түсінетін немесе түсінемін деп ойлайтындар. 

Майкл: Бұл жақсы сұрақ – біздің кез келгеніміз жад үлгісін шынымен түсінеміз бе?

Виталий: Әсіресе C++ тілінде.

Майкл: Бірде Ганс Боеммен сөйлесіңіз. Ол мен білетін ең ақылды адамдардың бірі, жад үлгілері бойынша жетекші сарапшы. Ол сізге түсінбейтін нәрсе көп екенін бірден айтады. Бірақ абстракциялар мәселесіне қайта оралсақ, менің ойымша, соңғы 30 жылдағы жад үлгілері саласындағы ең маңызды идея айтылды. Сарита Адвенің диссертациясында. (Редакцияның ескертуі: жарияланымдардың толық тізімі бар байланыс).

Алексей: Менің сұрағым: бұл кедергі ұғымның табиғатынан туындай ма? 

Майкл: Жоқ. Сарита дұрыс көзқараспен сіз барлық күрделілікті сәтті жасырып, жоғары өнімділікке қол жеткізе аласыз және бағдарламашыға қарапайым API бере аласыз деген қорытындыға келді. Егер сіз осы API-ді ұстанатын болсаңыз, дәйекті үйлесімділікке қол жеткізе аласыз. Менің ойымша, бұл дұрыс модель. Кодты деректер жарысысыз жазыңыз және дәйекті сәйкестікті алыңыз. Әрине, жарыс ықтималдығын азайту үшін арнайы құралдар қажет, бірақ бұл басқа мәселе. 

Владимир: Сіздің мансабыңызда шешілгендей болып көрінген мәселе кенеттен апатқа айналған немесе бұл мәселе шешілмейтін болып шыққан кездер болды ма? Мысалы, теорияда кез келген санды көбейтуге немесе кез келген санның жай екенін анықтауға болады. Бірақ іс жүзінде мұны істеу қиын болуы мүмкін; қазіргі аппараттық құралдармен сандарды факторлау қиын. Сізге ұқсас нәрсе болды ма?

Майкл: Менің есімде мұндай ештеңе жоқ. Маған белгілі бір аумақта ешнәрсе қалмағандай болып көрінген кездер болды, бірақ кейін ол жерде жаңа және қызықты нәрсе болды. Мысалы, мен шектеусіз кезектің аумағы жетілуге ​​жетті деп ойладым. MNS кезегін бірнеше жақсартулардан кейін көп ештеңе болмады. Содан кейін Моррисон (Адам Моррисон) және Афек (Йехуда Афек) ойлап тапты LCRQ кезегі. Шектеусіз көп ағынды кезек мүмкін екені белгілі болды, мұнда көп жағдайда критикалық жолда тек алу және арттыру нұсқауы болды. Және бұл жақсырақ өнімділік тәртібіне қол жеткізуге мүмкіндік берді. Бұл әкелу және көбейту өте пайдалы нәрсе екенін білмегендіктен емес. Бұл туралы Эрик Фрейденталь 1980 жылдардың соңында Аллан Готтлибпен бірге Ультракомпьютердегі жұмысында жазған, бірақ бұл шектеулі кезектер туралы болды. Моррисон мен Афек шектеусіз кезекте алу және арттыру мүмкіндігін пайдалана алды.

Жаңа архитектуралар. Транзакциялық жадының жеңісі жақын ба?

Владимир: Алгоритмдерге пайдалы болуы мүмкін жаңа архитектуралық шешімдерді іздеп жүрсіз бе? 

Майкл: Әрине, мен жүзеге асырылғанын қалайтын нәрселер көп. 

Владимир: Мысалы, қандай?

Майкл: Біріншіден, Intel және IBM процессорларындағы аппараттық деңгейдегі транзакциялық жадымызға бірнеше қарапайым кеңейтімдер. Атап айтқанда, транзакциялық емес жүктеме мен дүкен транзакциялар ішінде бірден қолжетімді болғанын қалаймын. Олар бірден орын алғанға дейінгі реттіліктегі ілмектерге әкеледі, сондықтан олар қиын болуы мүмкін. Бірақ абстракциялық қабаттарды сақтасаңыз, транзакциядан тыс уақытта өте қызықты нәрселер көп болады. Мұны жүзеге асыру қаншалықты қиын болатынын білмеймін, бірақ бұл өте пайдалы болар еді. 

Тағы бір пайдалы нәрсе - қашықтағы жадтан кэшті жүктеу. Менің ойымша, бұл ерте ме, кеш пе. Бұл технология бөлшектелген жады бар жүйелерді құруға мүмкіндік береді. Тіректе, айталық, 100 терабайт тұрақты жадты сақтауға болады және операциялық жүйенің өзі сол жадтың қай бөлімдері процессорлардың физикалық мекенжай кеңістігіне сәйкес келетінін динамикалық түрде шешеді. Бұл бұлтты есептеулер үшін өте пайдалы болар еді, өйткені ол қажет тапсырмаларға жадтың үлкен көлемін беруге мүмкіндік береді. Менің ойымша, біреу мұны жасайды.

Виталий: Транзакциялық жады туралы айтуды аяқтау үшін менде осы тақырып бойынша тағы бір сұрағым бар. Транзакциялық жад стандартты көп ағынды деректер құрылымдарын ауыстыра ма?

Майкл: Жоқ. Мәмілелер алыпсатарлық механизм болып табылады. Бағдарламалау деңгейінде бұл атомдық құлыптар, бірақ олардың ішінде болжамдар бар. Мұндай болжау болжаулардың көпшілігі дұрыс болған жағдайда жұмыс істейді. Сондықтан транзакциялық жады ағындар бір-бірімен әрең әрекеттескенде жақсы жұмыс істейді және тек өзара әрекеттесулердің жоқтығына көз жеткізу керек. Бірақ ағындар арасында хабарлама басталса, транзакциялардың пайдасы шамалы. Түсіндіруге рұқсат етіңіз, біз транзакциялар бүкіл атомдық операцияға оралған жағдай туралы айтып отырмыз. Оларды әлі де көп ағынды деректер құрылымдарының құрамдастары ретінде сәтті пайдалануға болады. Мысалы, егер сізге үш сөзден тұратын CAS қажет болса және бір уақытта жиырма ағынмен жұмыс істейтін шынымен көп ағынды алгоритмнің ортасында үш кішкене нәрсені көп ағынды қажет етсеңіз. Жалпы, транзакциялар пайдалы болуы мүмкін, бірақ олар көп ағынды деректер құрылымдарын дұрыс жобалау қажеттілігін жоймайды. 

Тұрақты жад, Optane DIMM, өте жылдам құрылғылар.

Виталий: Менің айтқым келетін соңғы нәрсе - сіздің қазіргі зерттеуіңіздің тақырыбы: өзгермейтін жады. Жақын болашақта бұл салада не күтуге болады? Мүмкін сіз бұрыннан бар тиімді енгізулерді білесіз бе? 

Майкл: Мен аппараттық сарапшы емеспін, мен тек жаңалықтардан не оқығанымды және әріптестерімнің айтқанын білемін. Барлығы Intel сататынын естіген Optane DIMMдинамикалық жедел жадқа қарағанда оқу кідірісі шамамен 3 есе және жазу кідірісі 10 есе. Жақында олар өте үлкен көлемді нұсқаларда қол жетімді болады. Сізде бірнеше терабайт байт мекенжайы бар жедел жады бар ноутбук болуы мүмкін деп ойлау қызық. 10 жылдан кейін біз бұл жаңа технологияны қолдануды шешетін шығармыз, өйткені біз DRAM-ды қолданамыз - тек дыбыс деңгейін арттырамыз. Бірақ энергетикалық тәуелсіздіктің арқасында біз үшін мүлде жаңа мүмкіндіктер ашылады. Біз жад стегін түбегейлі өзгерте аламыз, осылайша байт мекенжайы бар жұмыс жады мен блоктық құрылымды тұрақты жад арасында ешқандай айырмашылық болмайды. Осылайша, бір бағдарламадан екіншісіне блоктық құрылымды файлдарға көшіру қажет барлық нәрсені сериялаудың қажеті жоқ. Осыдан операциялық жүйелерге, орындалу орталарына және таратылған деректер қоймаларына әсер ететін көптеген маңызды принциптерді алуға болады. Бұл аймақта жұмыс істеу өте қызықты. Жеке маған мұның бәрі не әкелетінін болжау қиын, бірақ мұндағы мәселелер өте қызықты. Мұнда революциялық өзгерістер болуы мүмкін және олар көп ағынмен жұмыс істеуден табиғи түрде жүреді, өйткені ақауларды қалпына келтіру жүйенің қалыпты жұмысының жанында «көп ағынды» процесс болып табылады. 

Мен қазір жұмыс істеп жатқан екінші негізгі тақырып - өте жылдам құрылғыларды басқару және жүйелік саясатты басқару арқылы пайдаланушы кеңістігінен құрылғыларға қауіпсіз қол жеткізу. Соңғы жылдары құрылғыға кіруді пайдаланушы кеңістігіне жылжыту үрдісі байқалды. Бұл әрбір 5 микросекунд сайын жаңа пакетті қажет ететін желі интерфейсінің үстінде TCP-IP ядро ​​стегі жұмыс істей алмайтындықтан жасалады; ол жай ғана орындалмайды. Сондықтан өндірушілер құрылғыларға тікелей қол жеткізуді қамтамасыз етеді. Бірақ бұл операциялық жүйе процесті басқаруды жоғалтады және ол бәсекелес қолданбалар үшін құрылғыға дұрыс қол жеткізуді қамтамасыз ете алмайды дегенді білдіреді. Біздің зерттеу тобымыз бұл кемшілікті болдырмауға болады деп есептейді. Осы айда USENIX ATC-те бұл туралы мақаламыз болады. Бұл тұрақтылық бойынша жұмыспен байланысты, өйткені ұзақ мерзімді байт мекенжайы бар тұрақты жад, мәні бойынша, пайдаланушы кеңістігінде қол жеткізуді қажет ететін ультра жылдам енгізу/шығару мүмкіндігі бар құрылғы болып табылады. Бұл зерттеу микроядроларға, экзокернелдерге және функционалдылықты ОЖ ядросынан пайдаланушы кеңістігіне қауіпсіз жылжытудың басқа дәстүрлі әрекеттеріне жаңа тәсілдерді мүмкін етеді. 

Владимир: Байт мекенжайы бар жад өте жақсы, бірақ физикалық шектеу бар - жарық жылдамдығы. Бұл құрылғымен әрекеттесу кезінде сөзсіз кідіріс болатынын білдіреді. 

Майкл: Өте дұрыс.

Владимир: Жаңа жүктемелерге төтеп беруге қабілеттілік жеткілікті ме?

Майкл: Бұл тамаша сұрақ, бірақ маған жауап беру қиын болады. Жадта өңдеу идеясы біраз уақыттан бері болды, бұл өте қызықты, бірақ сонымен бірге өте күрделі. Мен бұл салада жұмыс істеген жоқпын, бірақ ол жерде біраз жаңалықтар ашылса, жақсы болар еді. Басқа қосатын ештеңем жоқ деп қорқамын. 

Владимир: Тағы бір мәселе бар. Жаңа, айтарлықтай үлкен көлемдегі жедел жадты процессорға сыйдыру мүмкін болмайды. Сондықтан физикалық шектеулерге байланысты бұл ЖЖҚ оқшауланған болуы керек. 

Майкл: Барлығы интегралдық схемаларды өндірудегі ақаулар санына байланысты. Егер жартылай өткізгішті пластиналарды мүлде ақаусыз жасау мүмкін болса, одан тұтас микросұлба жасауға болар еді. Бірақ қазір біз пошта маркаларынан үлкенірек микросхемалар жасауды білмейміз. 

Владимир: Бірақ біз әлі де үлкен өлшемдер туралы айтамыз, шамамен сантиметр. Бұл сөзсіз кешігуге әсер етеді. 

Майкл: Иә. Жарық жылдамдығы туралы ештеңе істей алмайсыз. 

Владимир: Өкінішке орай. 

Келесі үлкен тренд. Қос деректер құрылымдары. Гидра.

Виталий: Менің түсінуімше, сіз жаңа трендтерді өте тез ұстайсыз. Сіз транзакциялық жадта алғашқылардың бірі болдыңыз және тұрақты жадта алғашқылардың бірі болдыңыз. Келесі үлкен тренд қандай болады деп ойлайсыз? Немесе бұл құпия шығар?

Майкл: Шынымды айтсам, білмеймін. Жаңа бірдеңе пайда болған кезде байқай аламын деп үміттенемін. Маған өз бетімше жаңа саланы ойлап табу бақыты бұйырмады, бірақ мен бірнеше рет сәттілікке ие болдым және басқалар жасаған жаңа салаларда ертерек жұмыс істей бастадым. Болашақта осыны істей аламын деп үміттенемін.

Алексей: Бұл сұхбаттағы соңғы сұрақ Hydra-дағы өнеріңіз бен мектептегі әрекеттеріңіз туралы болмақ. Егер мен дұрыс түсінсем, мектептегі есеп блоктаусыз алгоритмдер туралы, ал конференцияда қос деректер құрылымдары туралы болады. Осы есептер туралы бірнеше сөз айта аласыз ба?

Майкл: Ішінара біз сіздермен осы сұхбатта осы тақырыптарды қозғадық. Бұл менің студентім Билл Шерермен жасаған жұмысым туралы. Ол оған диссертация жазды және оған Даг Ли де үлес қосты және ол ақырында Java кітапханасындағы көп ағынды синхронды кезектердің бөлігі болды. Мәліметтер құрылымы блоктаусыз оқылады және жазылады деп есептейік, яғни әрбір операцияда критикалық жолдағы нұсқаулардың шектеулі саны бар. Деректерді бос контейнерден жоюға немесе осы контейнерде жоқ белгілі бір деректерді жоюға әрекеттенсеңіз, мұны істеу мүмкін еместігі туралы дереу хабарланады. Бірақ ағынға бұл деректер шынымен қажет болса, бұл әрекет қабылданбауы мүмкін. Содан кейін бірінші ойға келетін нәрсе - қажетті деректер пайда болды ма деп үнемі сұрайтын циклды жасау. Бірақ содан кейін басқалардың барлығына кедергі болады. Сонымен қатар, бұл тәсілмен сіз 10 минут күте аласыз, содан кейін басқа жіп келеді және ол алдымен қажетті деректерді кездейсоқ алады. Қос деректер құрылымдарында әлі де құлыптар жоқ, бірақ олар ағындарды дұрыс күтуге мүмкіндік береді. «Қос» термині құрылымда не деректер, не деректерге сұраныстар бар екенін білдіреді, оларды антидеректер деп атаймыз. Сондықтан бос контейнерден бірдеңе алуға әрекеттенсеңіз, оның орнына сұрау контейнерге жіберіледі. Енді ағын ешкімге кедергі жасамай сұрауды күте алады. Сонымен қатар, деректер құрылымы сұрауларға басымдықтарды тағайындайды, осылайша қабылданған кезде ол оларды қажетті адамға береді. Нәтиже - әлі де ресми спецификациясы және іс жүзінде жақсы өнімділігі бар құлыптанбайтын механизм. 

Алексей: Бұл деректер құрылымынан қандай үміт күтесіз? Ол барлық жалпы жағдайларда өнімділікті жақсарта ма, әлде белгілі бір жағдайларға қолайлырақ па? 

Майкл: Біріншіден, құлыпсыз контейнер қажет болса, екіншіден, онда жоқ контейнерден деректерді алу қажет болған жағдайда күту қажет болса, пайдалы. Менің білуімше, біздің құрылым осы екі шарт орындалған кезде оңтайлы мінез-құлықты қамтамасыз етеді. Сондықтан мұндай жағдайларда мен оны пайдалануды ұсынамын. Құлыпсыз деректер құрылымдарының басты артықшылығы - олар өнімділік мәселелерін болдырмайды. Ал күту көптеген алгоритмдерде өте маңызды, егер деректер бір ағыннан екіншісіне тасымалданса.

Виталий: Түсіндіруге рұқсат етіңіз: мектепте де, конференцияда да бір нәрсе туралы сөйлесесіз бе?

Майкл: Мектепте мен сөйлеймін жалпы көп ағынды деректер құрылымдары туралы, сабақтың басында көрсетілген негізгі қағидалар. Көрермендер жіптердің не екенін біледі және құлыптармен таныс деп ойлаймын. Осы негізгі білімге сүйене отырып, мен құлыпсыз деректер құрылымдары туралы айтатын боламын. Мен жадты басқару сияқты тақырыптарды қозғай отырып, осы саладағы ең маңызды мәселелерге шолу жасаймын. Менің ойымша, MS кезегінен күрделі ештеңе болмайды.

Алексей: Мектепте сабағыңыздың соңында қос деректер құрылымдары туралы сабақ беруді жоспарлап отырсыз ба?

Майкл: Мен оларды атап өтемін, бірақ мен оларға көп уақыт жұмсамаймын. Гидра баяндамасы оларға арналады. Ол ақырында оны Java-ға айналдырған жобаны, сондай-ақ LCRQ кезегінің қос нұсқасын жасау үшін Джо Исраэлевичпен жұмыс істеуді және қос деректер құрылымдары үшін әмбебап дизайнды жасауды қамтиды.

Алексей: Сонымен мектептегі лекцияны жаңадан бастаушыларға, ал Hydra бойынша қос деректер құрылымдары бойынша лекцияны тәжірибесі бар адамдар үшін ұсынуға болады ма?

Майкл: Егер қателессем түзетіңіз, бірақ Hydra аудиториясы әртүрлі болады, соның ішінде көптеген Java мамандары және жалпы көп ағынды бағдарламалауға арнайы қатысы жоқ адамдар. 

Виталий: Иә, ол дұрыс.

Алексей: Ең болмағанда солай деп үміттенеміз.

Майкл: Бұл жағдайда мен осы сұхбатты қалай бастағанымызбен бірдей мәселеге тап боламын: техникалық мәліметтерге жеткілікті түрде бай және барлық тыңдаушыларға қолжетімді есепті қалай жасауға болады.

Виталий: Сіз дәріс оқығандай есеп бересіз бе? Яғни, аудиториямен сөйлесіп, жағдайға бейімделу?

Майкл: Мен олай болмайды деп қорқамын, себебі есепте слайдтар болады. Тыңдаушылар бастапқыда әртүрлі тілдерде сөйлеген кезде слайдтар маңызды. Көптеген адамдар мені ағылшын тілінде түсіну қиынға соғады, әсіресе мен тым тез сөйлейтін болсам. Мен бұл тақырыптарды таңдадым, өйткені Петр Кузнецов маған SPTDC мектебінде құлыпсыз деректер құрылымдары туралы айтуды сұрады; содан кейін маған Java пайдаланушылар тобының конференциясы үшін есеп керек болды және мен Java бағдарламашыларын қызықтыратын нәрсені таңдағым келді. Ең оңай жолы - Java кітапханасындағы менің қолымнан келген нәрселер туралы айту. 

Алексей: Біздің болжамымызша, Hydra аудиториясы құлыпсыз бағдарламалау туралы бірдеңе біледі және бұл салада біраз тәжірибесі бар. Бірақ бұл тек болжам, жағдай конференцияның өзінде анық болады. Қалай болғанда да, уақытыңыз үшін рахмет. Сұхбат оқырмандарымыз үшін өте қызықты болатынына сенімдімін. Үлкен рахмет!

Виталий: Рақмет сізге. 

Майкл: Мен Санкт-Петербургте кездескеніме қуаныштымын. 

Алексей: Біздің де әдемі қаламыз бар. Сіз осында болдыңыз ба?

Майкл: Жоқ, мен Ресейде ешқашан болған емеспін. Бірақ Санкт-Петербург әрқашан мен әлі бармаған, бірақ мен шынымен барғым келетін орындардың тізімінде болды, сондықтан мен шақыруға өте қуаныштымын. 

Алексей: Айтпақшы, бізде спикерлерге арналған экскурсиялар бағдарламасы болады. Сұхбатыңызға көп рахмет, күндеріңіз сәтті өтсін!

Сіз Майклмен әңгімеңізді 2019 жылдың 11-12 шілдесінде Санкт-Петербургте өтетін Hydra 2019 конференциясында жалғастыра аласыз. Ол есеппен келеді «Қос деректер құрылымдары». Билеттерді сатып алуға болады ресми сайтында.

Ақпарат көзі: www.habr.com

пікір қалдыру