"Rezultatet empirike janë vetëm për botim, motivet e vërteta të punës janë estetike." Intervistë e shkëlqyer me Michael Scott

"Rezultatet empirike janë vetëm për botim, motivet e vërteta të punës janë estetike." Intervistë e shkëlqyer me Michael Scott Michael Scott - për 34 vjet si profesor i shkencave kompjuterike në Universitetin e Rochesterit dhe shërbeu si dekan për pesë vjet në universitetin e tij alma mater, Universitetin e Wisconsin-Madison. Ai kryen kërkime në programimin paralel dhe të shpërndarë dhe në dizajnin e gjuhëve, dhe ua mëson këto lëndë studentëve.

Bota e njeh Michaelin nga libri shkollor "Pragmatika e gjuhës së programimit", po puna "Algoritme për sinkronizim të shkallëzuar në multiprocesorët me memorie të përbashkët" mori Çmimin Dijkstra si një nga më të njohurit në fushën e informatikës së shpërndarë. Mund ta njihni edhe si autorin e atij algoritmi. Michael-Scott.

Së bashku me Doug Lee, ai zhvilloi algoritmet jo-bllokuese dhe radhët sinkrone që fuqizojnë bibliotekat Java. struktura të dyfishta të të dhënave JavaSE 6 ka përmirësuar performancën me 10 herë. ThreadPoolExecutor.

Përmbajtja:

  • Karriera e hershme, Universiteti i Rochesterit. Projekti Charlotte, gjuha e Lynx;
  • Ndërfaqe Koherente e Shkallëzueshme IEEE, bllokim MCS;
  • Mbijetesa në një botë në ndryshim të vazhdueshëm;
  • A po bëhen studentët më budallenj? Trendet globale, ndërkombëtarizimi;
  • Punë efektive me studentët;
  • Si të qëndroni në hap me zhvillimet më të fundit në përgatitjen e kurseve dhe librave të rinj;
  • Lidhja midis biznesit dhe akademisë;
  • Vënia e ideve në praktikë. MCS, MS, CLH, JSR 166, duke punuar me Doug Lee dhe shumë të tjerë;
  • Memorie transaksionale;
  • Arkitektura të reja. Kujtesa transaksionale është në prag të fitores;
  • Memorie jo-volatile, Optane DIMM, pajisje ultra të shpejta;
  • Trendi i radhës i madh. Strukturat e dyfishta të të dhënave. Hydra.

Intervistat zhvillohen nga:

Vitaly Aksenov — është aktualisht postdoktorant në IST Austria dhe anëtar i Departamentit të Shkencave Kompjuterike në Universitetin ITMO. Hulumtimi i tij përqendrohet në teorinë dhe praktikën e strukturave të të dhënave të njëkohshme. Përpara se t'i bashkohej IST, ai mori doktoraturën nga Universiteti Paris Diderot dhe Universiteti ITMO nën mbikëqyrjen e Profesor Petr Kuznetsov.

Alexey Fedorov është një prodhues në JUG Ru Group, një kompani ruse që organizon konferenca për zhvilluesit. Alexey mori pjesë në përgatitjen e më shumë se 50 konferencave dhe rezymeja e tij përmban gjithçka nga pozicioni i një inxhinieri zhvillimi në Oracle (JCK, Java Platform Group) deri në pozicionin e një zhvilluesi në Odnoklassniki.

Vladimir Sitnikov është inxhinier në Netcracker. Për dhjetë vjet ai ka punuar në performancën dhe shkallëzueshmërinë e NetCracker OS, softuer i përdorur nga operatorët e telekomit për të automatizuar proceset e menaxhimit të pajisjeve të rrjetit dhe rrjetit. I interesuar për çështjet e performancës së Java dhe Oracle Database. Autor i mbi një duzinë përmirësimesh të performancës në drejtuesin zyrtar të PostgreSQL JDBC.

Karriera e hershme, Universiteti i Rochesterit. Projekti Charlotte, gjuha e Lynx.

AlexPara së gjithash, doja t'ju thoja se ne në Rusi jemi të gjithë shumë të dhënë pas Shkencës Kompjuterike, Shkencës së të Dhënave dhe algoritmeve. Është pothuajse e pahijshme. Ne të gjithë kemi lexuar libër nga Cormen, Leiserson dhe RivestPrandaj, konferenca e ardhshme, shkolla dhe vetë kjo intervistë duhet të jenë shumë të njohura. Ne morëm pyetje të shumta për këtë intervistë nga studentë, programues dhe anëtarë të komunitetit, kështu që jemi shumë mirënjohës për këtë mundësi. A është Shkenca Kompjuterike po aq e popullarizuar në SHBA?

MichaelFusha jonë është kaq e larmishme, ka kaq shumë degë dhe ndikon në shoqëri në kaq shumë mënyra, saqë është e vështirë për mua t'ju jap një përgjigje përfundimtare. Por fakti është se ka nxitur ndryshime të mëdha në biznes, industri, arte dhe shoqëri në tërësi gjatë 30 viteve të fundit.

ВиталийLe të fillojmë me diçka më të largët. Shumë universitete kanë një lloj specializimi në një fushë të caktuar. Për Carnegie Mellon, është informatika paralele; për MIT, është kriptografia, robotika dhe shumëfillëzimi. A ka Universiteti i Rochesterit një specializim të ngjashëm?

MichaelSinqerisht, do të thoja se CMU dhe MIT specializohen në gjithçka. Departamenti ynë është përqendruar gjithmonë në inteligjencën artificiale. Gjysma e njerëzve tanë punojnë në IA ose bashkëveprimin njeri-kompjuter - një përqindje më e lartë se në departamentet e tjera, dhe gjithmonë ka qenë kështu. Por kur isha në CMU, nuk kisha asnjë kurs në IA, dhe nuk kam punuar kurrë në të. Pra, departamenti im specializohet në një problem me të cilin nuk kam lidhje. Lajmi i mirë është se problemi i dytë më i rëndësishëm në departamentin tonë është programimi i njëkohshëm dhe shumëfillor, që është fusha ime e ekspertizës.

ВиталийJu filluat të punonit në shkencën kompjuterike kur fusha e programimit me shumë fije sapo kishte filluar. Duke gjykuar nga lista juaj e publikimeve, puna juaj e hershme mbulonte një gamë mjaft të gjerë temash: menaxhimin e memories në sistemet me shumë fije, sistemet e skedarëve të shpërndarë dhe sistemet operative. Pse një shkathtësi e tillë? A po përpiqeshit të gjenit vendin tuaj në komunitetin e kërkimit?

MichaelSi student, kam marrë pjesë në Projekti i Charlotte-s në Universitetin e Wisconsin-it, ku u zhvillua një nga sistemet e para operative të shpërndara. Atje punova me Raphael Finkel-in (Raphael Finkel) dhe Marvin Solomon (Marvin Solomon). Disertacioni im ishte mbi zhvillimin e një gjuhe softueri sistemi për sistemet e shpërndara - falë Zotit, tani është harruar kryesisht. Unë krijova gjuhën e programimit Lynx, e cila kishte për qëllim thjeshtimin e krijimit të serverëve për një sistem operativ të shpërndarë të lidhur lirshëm. Meqenëse në atë kohë punoja kryesisht në sisteme operative, supozova se karriera ime do të përqendrohej edhe në to. Por Universiteti i Rochester ishte shumë i vogël dhe për shkak të kësaj, grupet e ndryshme atje bashkëvepronin shumë ngushtë me njëri-tjetrin. Nuk kishte një duzinë specialistësh të tjerë të sistemeve operative me të cilët mund të bashkëveproja, kështu që të gjitha kontaktet e mia ishin me njerëz që punonin në fusha krejtësisht të ndryshme. Më pëlqeu shumë kjo; të qenit një gjeneralist ishte një avantazh i madh për mua. Sa i përket strukturave të të dhënave me shumë fije dhe algoritmeve të sinkronizimit në veçanti, fillova të punoja në to krejtësisht rastësisht.

Ndërfaqe Koherente e Shkallëzueshme IEEE, bllokim MCS.

ВиталийA mund të na jepni pak më shumë detaje rreth kësaj?

MichaelKjo është një histori qesharake që nuk lodhem kurrë ta tregoj të gjithëve. Ndodhi në një konferencë. ASPLOS në Boston - ishte në fund të viteve '80 ose fillim të viteve '90. John Mellor-Crummie ishte i pranishëm në konferencë (John Mellor-Crummey), një i diplomuar i departamentit tonë. E njihja, por nuk kishim kryer më parë kërkime të përbashkëta. Mary Vernon (Mary Vernon) nga Wisconsin mbajti një prezantim mbi sistemin shumëprocesorësh që po zhvillonin në Wisconsin: Wisconsin MulticubeKy Multicube kishte një mekanizëm sinkronizimi harduerësh të quajtur Q në Sync Bit, i cili më vonë u riemërua Q në Lock Bit sepse tingëllonte si djathë Colby, kështu që ishte një lojë fjalësh. Nëse ju pëlqen multithreading, ndoshta e dini që Colby përfundimisht u bë mekanizmi i sinkronizimit për standardin IEEE Scalable Coherent Interface. Ishte një mekanizëm bllokimi që krijonte tregues nga një memorje e përkohshme në tjetrën në nivelin e harduerit në mënyrë që çdo mbajtës i bllokimit të dinte se kujt i takonte radha. Kur unë dhe John dëgjuam për këtë, shikuam njëri-tjetrin dhe thamë, pse ta bëjmë këtë në nivelin e harduerit? A nuk mund ta arrijmë të njëjtën gjë me krahasim-dhe-shkëmbim? Morëm një nga fletoret që ndodheshin në klasë dhe e skicuam. Kyçja e MCS-sëndërsa Mary vazhdoi prezantimin e saj. Më vonë e zbatuam, eksperimentuam me të, ideja rezultoi e suksesshme dhe e botuam punimin. Në atë kohë, tema më dukej thjesht si një zbavitje argëtuese, pas së cilës planifikova të kthehesha te sistemet operative. Por më pas lindi një problem tjetër në të njëjtin drejtim dhe përfundimisht, sinkronizimi, shumëfillëzimi dhe strukturat e të dhënave u bënë specialiteti im kryesor. Siç mund ta shihni, e gjitha ndodhi rastësisht.

ВиталийKam kohë që jam i njohur me bllokimin e MCS, por deri më tani nuk e dija që ishte puna juaj dhe nuk e kuptova që ishte një akronim për mbiemrat tuaj.

Si të mbijetosh në një botë që ndryshon vazhdimisht?

AlexKam një pyetje të lidhur. Tridhjetë ose dyzet vjet më parë, kishte më shumë liri në specialitete të ndryshme. Nëse doje të filloje një karrierë në sisteme shumëfillësore ose të shpërndara, vazhdo; nëse doje të punoje në sisteme operative, s'ka problem. Çdo fushë kishte shumë pyetje të hapura dhe pak ekspertë. Tani, kanë dalë specializime të ngushta: nuk ka vetëm ekspertë të përgjithshëm të sistemeve operative, ka specialistë në sisteme specifike. E njëjta gjë vlen edhe për sistemet shumëfillësore dhe të shpërndara. Por problemi është se jeta jonë është e kufizuar; çdo person mund t'i kushtojë vetëm disa dekada kërkimit. Si mbijetojmë në këtë botë të re?

MichaelNe nuk jemi të veçantë në këtë drejtim; e njëjta gjë ndodhi edhe në fusha të tjera në një kohë apo në një tjetër. Pata fatin të filloja të punoja në shkencën kompjuterike kur kjo fushë ishte në hapat e saj të parë. Disa nga themelet ishin hedhur tashmë, por gjithçka ishte ende shumë e papjekur. Mundësi të tilla nuk vijnë shumë shpesh. Inxhinieria elektrike ka ekzistuar për një kohë shumë të gjatë, fizika edhe më gjatë, dhe matematika praktikisht që nga fillimi i kohës. Por kjo nuk do të thotë që askush nuk po bën më zbulime interesante në matematikë. Ende ka shumë probleme të hapura, por në të njëjtën kohë, duhet të mësojmë më shumë. Ke të drejtë që tani ka shumë më tepër specializime sesa ka pasur më parë, por kjo do të thotë vetëm se jemi në të njëjtën situatë si shumica e fushave të tjera të përpjekjeve njerëzore.

AlexJam i interesuar për një aspekt më praktik të pyetjes këtu. Unë kam një sfond në matematikë dhe, gjatë studimeve të mia, kam marrë pjesë shpesh në konferenca dhe kam punuar në tema të ndryshme shkencore. Zbulova se askush në audiencë nuk i kuptonte fjalimet e mia dhe, në mënyrë të ngjashme, fjalimet e të tjerëve ishin të kuptueshme vetëm për ta. Kjo nuk është aq e vërtetë për temat e nivelit të lartë, por sapo fillon të thellohesh në diçka, audienca nuk mund të të mbajë. Si e kapërcen këtë?

MichaelJo gjithmonë me sukses. Kohët e fundit përgatita një fjalim në të cilin u thellova shumë në detajet teknike. Ndërsa fjalimi përparonte, u bë e qartë se shumica e audiencës nuk më kuptonte, kështu që më duhej të përshtatesha menjëherë. Sllajdet nuk mund të ndryshoheshin, kështu që nuk pati shumë sukses - prandaj, në përgjithësi, përpiqem të mos përdor sllajde. Në përgjithësi, këshilla ime është të merrni në konsideratë audiencën tuaj. Duhet të dini kujt po i drejtoheni, nivelin e tyre të njohurive dhe çfarë duhet të dëgjojnë për të vlerësuar punën tuaj.

ВиталийA mund të më jepni një aluzion për çfarë ishte kjo leksion?

MichaelTë them të drejtën, do të preferoja të mos elaboroja këtë temë për të ruajtur anonimatin e personave të përfshirë. Çështja është se ne shpesh futemi shumë thellë në ndërlikimet e problemit mbi të cilin po punojmë, duke e bërë të vështirë shpjegimin në fillim të një fjalimi pse problemi është interesant dhe i rëndësishëm dhe si lidhet me çështjet që audienca tashmë i njeh. Nga përvoja ime, kjo është aftësia me të cilën studentët kanë më shumë vështirësi. Dhe ishte një dobësi në fjalimin tim të fundit. Një fjalim i strukturuar mirë duhet të lidhet me audiencën që në fillim, duke shpjeguar saktësisht se cili është problemi dhe si lidhet me temat që ata tashmë i dinë. Sa teknike është kjo hyrje varet nga audienca. Nëse është shumë e larmishme, fjalimi mund të jetë me shumë hapa. Hyrja duhet të jetë e arritshme për të gjithë, dhe në fund, mund të jetë shumë e vështirë për t'u ndjekur, por njerëzit relativisht të njohur me fushën tuaj do të jenë në gjendje të kuptojnë gjithçka.

A po bëhen studentët më budallenj? Trendet globale, ndërkombëtarizimi.

AlexJu i keni vëzhguar studentët për disa dekada tani. A bëhen studentët më budallenj apo më të zgjuar nga një dekadë në tjetrën apo nga viti në vit? Në Rusi, profesorët ankohen vazhdimisht se studentët po bëhen më budallenj çdo vit, dhe është krejtësisht e paqartë se çfarë të bëhet në lidhje me këtë.

MichaelVërtet mund të dëgjosh shumë negativitet nga ne, të vjetërit. Nënndërgjegjshëm, ne priremi të presim që studentët të përvetësojnë të gjitha 30 vitet e përvojës që kemi tashmë. Nëse unë kam një kuptim më të thellë sesa kisha në vitin 1985, atëherë pse studentët nuk e kanë atë? Ndoshta sepse janë 20 vjeç, si mendoni? Mendoj se ndryshimi më i rëndësishëm në dekadat e fundit ka të bëjë me përbërjen demografike: tani kemi dukshëm më shumë studentë ndërkombëtarë, me përjashtim të kanadezëve. Më parë kishte shumë kanadezë sepse jemi shumë afër kufirit kanadez dhe studentët prej andej mund të shkonin në shtëpi gjatë fundjavave. Por tani Kanadaja ka shumë universitete të mira dhe kanadezët preferojnë të studiojnë në shtëpi; ata udhëtojnë dukshëm më pak në SHBA.

AlexA mendoni se ky është një trend lokal apo global?

MichaelNuk mbaj mend saktësisht kush, por dikush tha që toka është e sheshtë. Fusha jonë është bërë dukshëm më ndërkombëtare. Konferencat ACM Më parë, ato mbaheshin ekskluzivisht brenda Shteteve të Bashkuara, pastaj u vendos që të mbaheshin në vende të tjera çdo katër vjet, dhe tani ato mbahen në të gjithë botën. Këto ndryshime kanë pasur një ndikim edhe më të madh. IEEE, sepse gjithmonë ka qenë një organizatë më ndërkombëtare sesa ACM. Dhe ka drejtues programesh nga Kina, India, Rusia, Gjermania dhe shumë vende të tjera, sepse po ndodhin shumë gjëra kudo tani.

AlexPor ndoshta ka disa aspekte negative në këtë ndërkombëtarizim?

MichaelDo të thoja se të gjitha aspektet negative janë politike, jo teknologjike. Dikur, problemi kryesor ishte që SHBA-të vidhnin njerëzit më të zgjuar dhe më të talentuar nga vendet anembanë botës. Tani, problemi kryesor janë lojërat politike midis vendeve të ndryshme mbi vizat dhe imigracionin.

AlexDomethënë, barriera dhe gjëra të tilla. Kuptohet.

VladimirPersonalisht, jam kurioz për qasjen tuaj kur u mësoni studentëve një lëndë të re. Ekzistojnë qasje të ndryshme: mund të përqendroheni në frymëzimin e tyre për të provuar diçka të re, ose mund të përqendroheni më shumë në detajet se si funksionon një teknologji e caktuar. Cilën preferoni?

Punë efektive me studentët

AlexDhe si e gjen atë ekuilibrin e mallkuar midis të parës dhe të dytës?

MichaelProblemi është se orët e mësimit nuk shkojnë gjithmonë ashtu siç do të doja unë. Zakonisht u jap studentëve materiale leximi paraprakisht në mënyrë që ata ta përvetësojnë atë, ta kuptojnë sa më mirë që të jetë e mundur dhe të formuloj pyetje rreth çdo pike që nuk e kanë kuptuar. Pastaj, në orën e mësimit, mund të përqendrohemi në pikat më të vështira dhe t'i shqyrtojmë ato së bashku. Kështu më pëlqen të jap mësim. Por duke pasur parasysh ngarkesën aktuale të punës, nuk kam gjithmonë mundësinë të sigurohem që ata janë përgatitur paraprakisht. Si rezultat, përfundoj duke shpenzuar shumë më tepër kohë për përmbledhje të përgjithshme sesa do të doja. Pavarësisht kësaj, përpiqem t'i mbaj orët tona interaktive. Përndryshe, është më e lehtë të regjistrosh një video pasi studentët mund ta shikojnë më pas në shtëpi. Qëllimi i orëve të mësimit të drejtpërdrejtë është ndërveprimi njerëzor. Në orën e mësimit, preferoj të përdor shkumës dhe një tabelë në vend të diapozitivave, përveç rasteve të rralla kur një diagram është shumë kompleks për t'u shfaqur në tabelë. Kjo më liron nga detyrimi për t'iu përmbajtur një plani të ngurtë mësimi. Meqenëse nuk ka një rend të caktuar në të cilin e paraqes materialin, kjo më lejon të përshtatem me audiencën bazuar në pyetjet që marr. Në përgjithësi, përpiqem t’i bëj orët sa më interaktive të jetë e mundur, në mënyrë që materiali që paraqes të varet nga pyetjet që më bëhen.

VladimirKjo është shumë mirë. Nga përvoja ime, është mjaft e vështirë të marrësh pyetje nga dëgjuesit. Edhe nëse u bën atyre paraprakisht ndonjë pyetje, pavarësisht se sa budallaqe ose të zgjuara janë, ata prapë heshtin. Si e përballoni këtë?

MichaelDo të qeshni, por nëse qëndroni aty në heshtje mjaftueshëm gjatë, herët a vonë të gjithë do të ndihen në siklet dhe dikush do të bëjë një pyetje. Ose mund të bëni një pyetje të thjeshtë teknike po/jo për të përcaktuar nëse njerëzit e kuptuan atë që sapo u tha. Për shembull, a ka një garë të dhënash në shembullin e dhënë? Kush mendon kështu? Kush mendon jo? Kush nuk kupton asgjë, sepse vetëm gjysma e duarve u ngritën?

ВиталийDhe nëse përgjigjesh gabim, përjashtohesh nga klasa :)

MichaelNëse nuk keni përgjigjur asgjë, atëherë duhet të bëj një pyetje. Duhet të kuptoj se çfarë duhet të dijë studenti për t'iu përgjigjur pyetjes që sapo bëra. Ata duhet të më ndihmojnë mua t'i ndihmoj. Jam i gatshëm të përshtatem me ta në mënyrë që ata të mund ta zgjidhin problemin. Por nëse nuk e di se çfarë po ndodh në kokat e tyre, nuk mund ta bëj këtë. Dhe nëse i mbaj studentët në gatishmëri për një kohë të mjaftueshme, ndonjëherë ata përfundojnë duke bërë pyetjet e duhura - pyetje që më lejojnë të shoh se çfarë po ndodh në kokat e tyre. 

AlexA të çojnë ndonjëherë këto pyetje në ide që nuk i kishe menduar më parë? A janë të papritura? A të lejojnë ta shikosh një problem në një dritë të re?

MichaelKa pyetje që hapin një mënyrë të re për prezantimin e materialit. Shpesh, pyetjet çojnë në probleme interesante që nuk kisha planifikuar t'i diskutoja. Studentët shpesh më thonë se kam tendencë të largohem nga tema e mësimit kur kjo ndodh. Dhe, sipas tyre, kjo është shpesh pjesa më interesante e mësimit. Shumë rrallë, vetëm disa herë, studentët kanë bërë pyetje që kanë çuar në një drejtim të ri në kërkim dhe janë zhvilluar në një artikull. Kjo ndodh shumë më shpesh në biseda me studentët sesa në klasë, por ka ndodhur herë pas here gjatë orës së mësimit. 

AlexPra, studentët ju bënë pyetje që më vonë mund të përdoren si bazë për një artikull?

Michael: Po. 

ВиталийSa shpesh zhvilloni këto lloj bisedash me studentët? Kur duan ata të mësojnë më shumë nga ajo që është trajtuar në orën e mësimit?

MichaelMe studentët e mi të diplomuar—gjithë kohës. Kam rreth pesë ose gjashtë prej tyre dhe diskutojmë vazhdimisht gjëra. Biseda të tilla me studentë që thjesht ndjekin mësimet e mia nuk janë shumë të shpeshta. Edhe pse do të doja që të ndodhte më shpesh. Dyshoj se ata thjesht kanë frikë të vijnë në zyrën e fakultetit gjatë orarit të punës. Çdo semestër, disa studentë arrijnë ta kapërcejnë këtë pengesë psikologjike dhe është gjithmonë shumë interesante të flasësh me ta pas mësimit. Megjithatë, nëse të gjithë studentët do të ishin po aq të guximshëm, thjesht nuk do të kisha kohë. Ndaj ndoshta gjithçka po funksionon siç duhet. 

ВиталийSi e gjeni kohën për të bashkëvepruar me studentët? Për aq sa di unë, në SHBA, profesorët janë shumë të zënë—me aplikimet për grante e të ngjashme. 

MichaelSinqerisht, puna me studentët është aspekti i punës sime që më pëlqen më shumë. Kështu që jam mjaft e motivuar. Shumicën e kohës që kaloj në zyrë e kaloj në takime të ndryshme. Tani është verë, kështu që axhenda ime është më pak e ngjeshur, por gjatë vitit shkollor, jam plotësisht e zënë çdo ditë nga ora 9 e mëngjesit deri në orën 17 të pasdites. Kërkime, vlerësime, grante - kam vetëm mbrëmje dhe fundjava për të gjitha këto. 

Si të qëndroni në hap me zhvillimet më të fundit në përgatitjen e kurseve dhe librave të rinj.

AlexA po jepni ende ndonjë nga lëndët që keni dhënë për një kohë të gjatë? Diçka si Hyrje në Shkencën Kompjuterike.

MichaelGjëja e parë që më vjen ndërmend këtu është një kurs mbi gjuhët e programimit. 

AlexSa i ndryshëm është versioni i sotëm i këtij kursi nga ai që ishte 10, 20 ose 30 vjet më parë? Ndoshta tendenca e përgjithshme është më interesante sesa detajet e një kursi të caktuar.

MichaelKursi im mbi gjuhët e programimit ishte disi i pazakontë në kohën kur e krijova. Fillova ta jepja mësim në fund të viteve 1980, duke zëvendësuar kolegun tim, Doug Baldwin (Doug Baldwin). Tema e kursit lidhej vetëm në mënyrë tangjenciale me specializimin tim, por kur ai u largua, e gjeta veten kandidatin më të mirë për ta dhënë mësim. Nuk më pëlqente asnjë nga tekstet ekzistuese, kështu që përfundova duke shkruar vetë librin shkollor për kursin. (Shënim i redaktorit: Kjo ka të bëjë me librin "Pragmatika e gjuhës së programimit") Aktualisht përdoret në mbi 200 universitete në të gjithë botën. Qasja ime është e pazakontë në atë që përzien qëllimisht shqetësimet e dizajnit të gjuhës dhe zbatimit, duke u përqendruar në ndërveprimet midis këtyre aspekteve në çdo fushë të mundshme. Qasja thelbësore ka mbetur e pandryshuar, si dhe shumë nga konceptet thelbësore: abstraksionet, hapësirat e emrave, modulariteti, llojet. Megjithatë, grupi i gjuhëve të përdorura për të demonstruar këto koncepte ka ndryshuar tërësisht. Kur u krijua kursi për herë të parë, ai përfshinte shumë shembuj në Pascal, por sot, shumë nga studentët e mi nuk kanë dëgjuar kurrë për atë gjuhë. Por ata i njohin Swift, Go dhe Rust, kështu që duhet të flas për gjuhët që përdoren sot. Gjithashtu, studentët tani janë të aftë në gjuhët e skriptimit, ndërsa kur fillova të jepja mësim këtë kurs, ai ishte tërësisht i përkushtuar ndaj gjuhëve të kompajluara. Tani, megjithatë, na duhet shumë material mbi Python, Ruby dhe madje edhe Perl, sepse kjo është ajo që njerëzit shkruajnë kod në këto ditë, dhe shumë gjëra interesante po ndodhin në këto gjuhë, duke përfshirë edhe fushën e dizajnit të gjuhës. 

ВиталийAtëherë pyetja ime tjetër lidhet me të mëparshmen. Si ia dilni mbanë në këtë fushë? Dyshoj se përditësimi i një kursi si ky kërkon shumë punë - duhet të kuptoni gjuhë të reja dhe të kapni konceptet bazë. Si ia dilni mbanë me këtë?

MichaelNuk mund të them se gjithmonë ia arrij 100%. Por më shpesh, bëj atë që bëjnë të gjithë të tjerët - lexoj internetin. Nëse dua ta kuptoj Rust-in, e kërkoj në Google, shkoj në faqen e internetit të Mozilla-s dhe lexoj udhëzuesin atje. Kjo është për atë që po ndodh në zhvillimin komercial. Sa i përket akademikëve, duhet të ndjek fjalimet në konferenca të mëdha. 

Lidhjet midis biznesit dhe akademisë

ВиталийLe të flasim për lidhjen midis kërkimit shkencor në biznes dhe atij akademik. Gjeta disa artikuj mbi koherencën e memorjes së përkohshme në listën tuaj të punimeve. Për aq sa kuptoj unë, në kohën e publikimit të tyre, algoritmet e koherencës së memorjes së përkohshme ishin të paqëndrueshme? Ose nuk përdoreshin gjerësisht. Sa të pranuara ishin idetë tuaja në praktikë?

MichaelNuk jam tamam i sigurt për cilat botime po flet. Kam bërë mjaft punë me studentët e mi, Bill Bolosky (William Bolosky) dhe Leonidas Kontotanassis (Leonidas Kontothanassis) në fillim të viteve 1990, duke punuar në menaxhimin e kujtesës për makinat Neumann. Në atë kohë, biznesi nuk e kuptonte ende se si të ndërtonte siç duhet një sistem shumëprocesorësh: nëse duhej të ndërtonte mbështetje për aksesin në kujtesë në distancë në nivelin e harduerit, nëse duhej ta bënte kujtesën të shpërndarë, nëse duhej të ngarkonte memorjen e përkohshme nga memoria e përkohshme, apo nëse duhej të zhvendoste faqet në sistemin operativ. Bill dhe Leonidas punonin të dy në këtë fushë dhe eksploronin qasje që nuk përfshinin ngarkimin në distancë të memorjes së përkohshme. Kjo nuk lidhej drejtpërdrejt me koherencën e memorjes së përkohshme, por prapëseprapë ishte punë në menaxhimin e kujtesës NUMA, dhe më vonë u bë themeli për qasjet moderne për vendosjen e faqeve në sistemet operative moderne. Në përgjithësi, Bill dhe Leonidas bënë punë të rëndësishme, megjithëse jo më me ndikim në këtë fushë - shumë njerëz të tjerë po punonin në të njëjtën gjë në atë kohë. Më vonë, unë punova në koherencën e memorjes së përkohshme në kontekstin e kujtesës transaksionale të harduerit. Grupi me të cilin punova për këtë problem përfundoi duke marrë disa patenta. Ka disa ide interesante pas tyre, por nuk mendoj se ato do të zbatohen përfundimisht. Sidoqoftë, është e vështirë për mua të gjykoj fitimprurësinë e tyre. 

AlexNë këtë drejtim, një pyetje më personale: sa e rëndësishme është për ju që idetë tuaja të vihen në praktikë? Apo nuk mendoni për këtë?

MichaelMë pëlqen ta bëj këtë pyetje në intervista me njerëz të tjerë, qofshin ata aplikantë apo njerëz të interesuar të punojnë në departament. Nuk mendoj se ka një përgjigje të saktë. Njerëzit që bëjnë gjëra të bukura mund të kenë motivime shumë të ndryshme. Më tërheqin problemet sepse personalisht i gjej interesante, jo për shkak të përdorimit të tyre praktik. Por nga ana tjetër, kur diçka interesante gjen një përdorim, më pëlqen shumë. Pra, nuk është kaq e thjeshtë. Por në fillim të një projekti, nuk motivohem nga ideja e përdorimit të saj përfundimtar në botë, por nga koherenca e idesë dhe dëshira për ta eksploruar atë dhe për të parë se çfarë del prej saj. Nëse në fund të fundit jep përfitime praktike, shkëlqyeshëm. 

AlexFalë arsimimit dhe përvojës suaj, jeni në një pozicion më të mirë se shumë të tjerë për të vlerësuar vlerën e ideve të të tjerëve. Mund t'i krahasoni ato dhe të përcaktoni se cilat funksionojnë më mirë me cilat. Jam i sigurt që keni një mendim mbi teknologjitë që përdoren aktualisht në praktikë nga prodhues të mëdhenj si Intel. Sipas mendimit tuaj, a është rruga e duhur që po ndjekin këto kompani?

MichaelPraktika gjithmonë sillet rreth asaj që mund të jetë komercialisht e suksesshme, domethënë, të gjenerojë fitim, dhe është më mirë të pyesësh dikë tjetër për këtë. Puna ime rezulton kryesisht në botime, dhe në fushën e sistemeve operative, ato vlerësohen nga metrikat e performancës: shpejtësia, konsumi i energjisë, madhësia e kodit. Por gjithmonë më është dukur se këto rezultate empirike u shtohen punimeve vetëm që të mund të publikohen, ndërsa motivet e vërteta të njerëzve për punë janë estetike. Studiuesit vlerësojnë zgjidhjet nga një perspektivë artistike; ata kujdesen për elegancën e ideve të tyre dhe përpiqen të krijojnë diçka më të mirë se qasjet ekzistuese. Studiuesit drejtohen nga motive personale, subjektive dhe estetike. Por nuk mund të shkruash për këtë në vetë punimin; këto gjëra nuk janë argumente për komitetin e programit. Për fat të mirë, zgjidhjet elegante shpesh janë gjithashtu të shpejta dhe të lira. Rreth dhjetë kolegë të mi dhe unë diskutuam këtë temë rreth 15 vjet më parë dhe përfunduam duke shkruar një punim rreth saj. Mendoj se mund të gjendet ende tani; quhet "Si të vlerësohet kërkimi i sistemeve" ose diçka e tillë, ka më shumë se një duzinë autorësh. Ky është i vetmi artikull në të cilin unë jam autor së bashku me Sasha Fedorova, kështu që nëse kërkoni emrin e saj në listën time të publikimeve, do të gjeni atë që po kërkoni. Flet për vlerësimin e kërkimit të sistemeve dhe rëndësinë e elegancës. 

AlexPra, ekziston një ndryshim midis standardeve për atë që konsiderohet një rezultat i mirë në shkencë dhe në biznes. Në shkencë, vlerësohen performanca, konsumi i energjisë, TDP, lehtësia e zbatimit dhe shumë më tepër. A keni mundësinë të kryeni këtë lloj kërkimi në universitet? A keni një laborator me makina dhe arkitektura të ndryshme ku mund të kryhen eksperimente?

MichaelPo, departamenti ynë ka shumë makina interesante. Zakonisht janë të vogla; kemi një grumbull të vogël dhe shumë sisteme shumëprocesorësh me përshpejtues të ndryshëm. Gjithashtu kemi një qendër të madhe kompjuterike në kampus që u shërben studiuesve nga disa dhjetëra disiplina të ndryshme. Ka rreth një mijë nyje dhe njëzet mijë bërthama, të gjitha me Linux. Nëse lind nevoja, gjithmonë mund të blejmë disa AWS. Pra, nuk kemi kufizime të rëndësishme në harduer. 

AlexCila ishte situata tridhjetë vjet më parë? A kishte ndonjë problem atëherë?

MichaelGjërat ishin pak më ndryshe atëherë. Në mesin dhe fundin e viteve 1980, besohej se shkencës i mungonin burimet kompjuterike. Për të korrigjuar këtë situatë, Fondacioni Kombëtar i Shkencës (Fondacioni Kombëtar i Shkencës) krijoi programin e Kërkimit të Koordinuar Eksperimental (CER). Qëllimi i tij ishte të siguronte infrastrukturë kompjuterike për departamentet e shkencave kompjuterike dhe bëri një ndryshim të rëndësishëm. Me paratë që siguroi, ne blemë një BBN Butterfly me 128 nyje në Universitetin e Rochesterit në vitin 1984, një vit para se të vija unë. Në atë kohë, ishte sistemi më i madh multiprocessor me memorie të përbashkët në botë. Kishte 128 procesorë, secili në një motherboard të veçantë, që zinin katër rafte. Çdo procesor kishte një megabajt memorie; 128 megabajt RAM ishte një sasi e paimagjinueshme në atë kohë. Ne zbatuam për herë të parë bllokimin MCS në këtë makinë. 

AlexPra, nëse ju kuptoj saktë, problemi i harduerit tani është zgjidhur? 

MichaelNë përgjithësi, po. Ka disa paralajmërime: së pari, nëse punoni në arkitekturën e kompjuterëve në nivel çipi, është e vështirë ta bëni këtë në akademi sepse ka mjete shumë më të sofistikuara për këtë në biznes. Nëse keni nevojë për diçka më të vogël se 10 nanometra, do t'ju duhet ta jepni jashtë kompanisë. Është shumë më e lehtë të jesh studiues në Intel në atë fushë. Nëse punoni në komunikime optike në çipa ose memorie të ngurtë, do të gjeni teknologji në biznes që nuk janë ende të disponueshme në akademi, kështu që duhet të krijoni aleanca. Për shembull, Stephen Swanson (Steven Swanson) krijuar një partneritet i tillë për teknologjitë e reja të memories. Kjo qasje nuk funksionon gjithmonë, por në disa raste mund të jetë mjaft e suksesshme. Për më tepër, zhvillimi i sistemeve më të fuqishme kompjuterike është më i vështirë në shkencë. Projektet më të mëdha të superkompjuterëve që janë aktualisht në zhvillim e sipër në SHBA, Japoni dhe Kinë janë të gjitha të përqendruara në biznes. 

Vënia e ideve në praktikë. MCS, MS, CLH, JSR 166, bashkëpunimi me Doug Lee dhe shumë të tjera.

ВиталийJu keni folur tashmë se si filluat të punoni me algoritmet e sinkronizimit. Keni dy punime shumë të njohura mbi Bllokimi i MCS и Radhët e Michael-Scott (MS), të cilat në një farë mënyre u implementuan në Java. (Shënim i redaktorit: të gjitha publikimet mund të shihen по ссылке). Atje ky bllokim u zbatua me disa ndryshime dhe doli që Bllokimi i CLH-së, dhe radha u zbatua sipas planit. Por kaluan shumë vite midis botimit të artikujve tuaj dhe zbatimit të tyre praktik. 

AlexDuket sikur rreth 10 vjet në rastin e radhës.

MichaelPara se këto veçori të shfaqeshin në bibliotekën standarde Java?

ВиталийPo. Çfarë bëtë që kjo të ndodhte? Apo nuk bëtë asgjë?

MichaelMund t'ju tregoj se si radha MS hyri në Java 5. Disa vite para se të dilte, unë punoja me grupin e Mark Moyers në Sun Microsystems në laboratorin e tyre jashtë Bostonit. Ai organizoi një seminar për disa nga miqtë e tij që po punonin mbi probleme interesante në shumëfillezim, sepse donte të gjente tema që mund t'i shitej kompanisë së tij. Atje takova për herë të parë Doug Lea. Unë, Doug dhe rreth 25 persona të tjerë nga Sun po diskutonim prezantimin e Doug rreth JSR 166, e cila më vonë u bë java.util.concurrent. Gjatë rrugës, Doug përmendi se donte të përdorte radhën MS, por i duhej një numërues që ndërfaqja të trajtonte numrin e elementëve në radhë. Kjo do të thoshte se një metodë e veçantë, atomike, e saktë dhe e shpejtë, do ta bënte këtë. Unë sugjerova thjesht shtimin e numrave serialë në nyje, duke marrë numrin serial të nyjes së parë dhe të fundit, dhe duke zbritur njërën nga tjetra. Doug kruajti kokën, tha, "Pse jo?", dhe në fund bëri pikërisht këtë. Diskutuam zbatimin e kësaj qasje në një bibliotekë, por Doug e bëri pjesën më të madhe të punës vetë. Në fund të fundit, ai arriti të krijonte mbështetje të shkëlqyer për shumëfillesa në Java. 

AlexPra, nëse e kuptoj saktë, metoda .size() duhet të ketë qenë pjesë e ndërfaqes standarde të radhës së radhës dhe duhet të ketë pasur një kompleksitet algoritmik prej O(1)?

MichaelPo, dhe përveç kësaj, kërkohet një matës i veçantë.

AlexSepse nëse thirrni metodën .size() në Java, rezultati pritet të jetë i disponueshëm menjëherë, jo bazuar në madhësinë aktuale të koleksionit. E kuptova, faleminderit.

MichaelDisa vite më vonë punova mbi strukturat e të dhënave të dyfishta me studentin tim Bill Scherer - për këtë do të trajtohet edhe punimi im. raport mbi HydrënDoug na kontaktoi dhe tha se mund t'i përdorte ato në Java Executor Framework. Së bashku me Bill-in, ai krijoi dy implementime, të ashtuquajturat radhë të drejta dhe të padrejta. Unë u konsultova për këtë projekt, megjithëse nuk isha i përfshirë në shkrimin e kodit. Si rezultat, shpejtësia e ekzekutuesve u rrit ndjeshëm. 

VladimirA keni hasur ndonjëherë zbatime të pasakta të algoritmeve tuaja ose kërkesa për veçori të reja? Në përgjithësi, praktika duhet të përputhet me teorinë, por ato shpesh ndryshojnë. Le të themi se keni shkruar një algoritëm dhe ai funksionon në letër, por njerëzit që e zbatojnë atë fillojnë t'ju kërkojnë më shumë veçori ose disa përshtatje. A keni hasur ndonjëherë situata të tilla?

MichaelI vetmi shembull ku dikush më kontaktoi dhe më pyeti "si ta zbatoja" ishte pyetja e Doug-ut, të cilën e kam përmendur tashmë. Por ka pasur disa raste ku janë bërë ndryshime interesante për të përmbushur nevojat praktike. Për shembull, ekipi i K42 në IBM konvertoi bllokimin MCS dhe krijoi një ndërfaqe standarde që eliminoi nevojën për të kaluar nyjen e radhës para dhe mbrapa midis rutinave të blerjes dhe lëshimit. Kjo ndërfaqe standarde e bëri idenë, e bukur në teori, të funksiononte në praktikë. Çuditërisht, ata nuk botuan kurrë një punim rreth kësaj, dhe megjithëse morën një patentë, ajo u braktis më vonë. Koncepti ishte i shkëlqyer, dhe përpiqem të flas për të sa herë që është e mundur. 

Kishte raste të tjera ku njerëzit bënë përmirësime në algoritmet që publikova. Për shembull, radha MS ka një mekanizëm konfigurimi me dy faza, që do të thoshte se kishte dy CAS në rrugën kritike të radhës. Në makinat e vjetra, CAS ishin mjaft të shtrenjta. Intel dhe prodhues të tjerë i kanë optimizuar mirë kohët e fundit, por në të kaluarën, ato ishin udhëzime 30-ciklëshe, kështu që të kesh më shumë se një në rrugën kritike ishte e padëshirueshme. Si rezultat, u zhvillua një radhë e shkëlqyer që ishte e ngjashme me radhën MS, por kishte vetëm një operacion atomik në rrugën kritike. Kjo u arrit duke lejuar që një operacion të merrte kohë O(n) në vend të kohës O(1) brenda një intervali të caktuar kohor. Kjo ishte e pamundur, por e mundur. Kjo ndodhi sepse në pika të caktuara algoritmi përshkoi radhën nga fillimi në pozicionin aktual në radhë. Në përgjithësi, algoritmi doli të ishte shumë i suksesshëm. Për aq sa di unë, nuk përdoret shumë gjerësisht, pjesërisht sepse operacionet atomike kërkojnë shumë më pak burime sesa më parë. Por ideja ishte e shkëlqyer. Gjithashtu më pëlqen shumë puna e Dave Dice në Oracle. Çdo gjë që bën është shumë praktike dhe e përdor harduerin me shumë zgjuarsi. Ai ka pasur një dorë në një pjesë të konsiderueshme të algoritmeve të sinkronizimit të ndërgjegjshëm për NUMA-n dhe strukturave të të dhënave me shumë fije. 

VladimirKur shkruani algoritme ose u mësoni studentëve, rezultatet e punës suaj nuk janë menjëherë të dukshme. Komunitetit i duhet pak kohë që të njihet, për shembull, me një punim të ri. Një algoritëm i ri nuk gjen zbatim të menjëhershëm. 

MichaelNuk është aspak e qartë menjëherë nëse një artikull do të jetë me ndikim apo jo. Mendoj se do të ishte interesante të kryhej një studim mbi punimet që kanë fituar çmime konferencash. Domethënë, të shqyrtohen punimet që njerëzit në komitetet e programit në atë kohë i konsideronin si më të mirat. Duhet të përpiqemi të llogarisim, bazuar në numrin e citimeve dhe ndikimin në biznes, se sa me ndikim kishin në të vërtetë këto punime 10, 20, 25 vjet më vonë. Dyshoj se do të kishte një korrelacion të fortë midis këtyre dy parametrave. Nuk do të jetë zero, por ka shumë të ngjarë të jetë dukshëm më e dobët nga sa do të donim. Shumë ide mbeten të papretendimuara për një kohë të gjatë para se të fitojnë terren. Për shembull, merrni kujtesën transaksionale. Kaluan më shumë se 10 vjet nga botimi i punimit origjinal derisa njerëzit filluan të ndërtonin makina me të. Dhe kaluan plot 20 vjet para se kjo kujtesë të shfaqej në produktet komerciale. Për një kohë të gjatë, askush nuk i kushtoi vëmendje punimit, dhe më pas numri i citimeve ndaj tij u rrit ndjeshëm. Do të ishte e vështirë të parashikohej kjo paraprakisht. Nga ana tjetër, ndonjëherë idetë gjejnë zbatim të menjëhershëm. Disa vite më parë, unë bashkautorova një punim me Joe Izraelevitz për DISC që propozonte një përkufizim të ri formal të saktësisë për strukturat persistente të të dhënave që mund të përdoren pasi kompjuteri që i ekzekutonte ato rrëzohej. Më pëlqeu punimi që në fillim, por doli të ishte shumë më popullor nga sa prisja. Disa grupe të ndryshme e pranuan atë dhe përfundimisht u bë përkufizimi standard i strukturave persistente të të dhënave. Gjë që është sigurisht një gjë e mirë.

VladimirA përdorni ndonjë teknikë vlerësimi? A përpiqeni ndonjëherë të vlerësoni artikujt tuaj apo studentët tuaj? Për sa i përket faktit nëse personi që keni mësuar është në rrugën e duhur.

MichaelSi të gjithë të tjerët, jam më i përqendruar në atë që po punoj aktualisht. Si të gjithë të tjerët, herë pas here kontrolloj Google Scholar për të parë nëse citohen punimet e mia të mëparshme, por kjo ndodh kryesisht nga kurioziteti. Kryesisht jam i zhytur në atë që studentët e mi po bëjnë tani. Sa i përket vlerësimit të punës aktuale, është pjesërisht çështje estetike - çfarë është elegante dhe çfarë jo. Dhe në një nivel të përditshëm, pyetjet e hapura luajnë një rol të madh. Për shembull, një student mund të vijë tek unë me një grafik të disa rezultateve dhe ne do të përpiqemi të kuptojmë pse grafiku po sillet çuditshëm. Në përgjithësi, në punën tonë, ne përpiqemi vazhdimisht të kuptojmë gjëra që ende nuk i kuptojmë. 

Memoria transaksionale

ВиталийNdoshta duhet të flasim pak për kujtesën transaksionale?

MichaelMendoj se ia vlen të thuhet të paktën pak, sepse kam bërë shumë përpjekje për këtë. Është tema për të cilën kam botuar më shumë se për çdo temë tjetër. Por në të njëjtën kohë, çuditërisht, gjithmonë kam qenë mjaft skeptik në lidhje me kujtesën transaksionale. Sipas mendimit tim, Artikulli i Herlihy dhe Moss (M. Herlihy, J.E.B. Moss) u botua përpara kohës së tij. Në filli të viteve 1990, ata propozuan që memoria transaksionale mund të ndihmonte programuesit e talentuar që punonin në struktura të dhënash me shumë fije, në mënyrë që këto struktura të mund të përdoreshin më pas si biblioteka nga programuesit e zakonshëm. Me fjalë të tjera, do të ishte një ndihmë për Doug Lees që punonte në JSR 166 të tyre. Por memoria transaksionale nuk kishte për qëllim ta bënte të lehtë programimin me shumë fije. E megjithatë, pikërisht kështu perceptohej në filli të viteve 2000, kur fitoi popullaritet. U reklamua si një mënyrë për të zgjidhur problemin e programimit paralel. Kjo qasje më dukej gjithmonë e pashpresë. Memoria transaksionale mund të thjeshtonte vetëm shkrimin e strukturave paralele të të dhënave. Dhe kjo, sipas mendimit tim, është ajo që arriti. 

Mbi kompleksitetin e shkrimit të kodit me shumë fije

AlexShumë interesante. Duket se ekziston një pengesë e caktuar midis programuesve të rregullt dhe atyre që mund të shkruajnë kod me shumë fije. Vitin e kaluar, fola disa herë me njerëz që po zbatonin ndonjë strukturë algoritmike. Për shembull, me Martin Thompson, si dhe me programues që punojnë në biblioteka me shumë fije. (Shënim i redaktorit: Martin Thompson është një zhvillues shumë i njohur; ai shkroi disruptor и AeronDhe ai gjithashtu ka raportin në konferencën tonë Joker 2015, regjistrim video i disponueshëm në YouTubeAi është i njëjti. hapur këtë konferencë, regjistrim kryesor (Gjithashtu i arritshëm). Sipas tyre, sfida kryesore është që algoritmet të jenë të shpejta dhe të lehta për t’u përdorur. Pra, ata po përpiqen ta kapërcejnë këtë pengesë dhe të tërheqin sa më shumë njerëz në këtë fushë. Çfarë mendoni për këtë?

MichaelKy është problemi kryesor i shumëfillesave: si të arrihet performancë e lartë pa rritur kompleksitetin e sistemit. 

AlexSepse kur përpiqen të shmangin kompleksitetin, algoritmi bëhet më pak i përgjithshëm.

MichaelÇelësi këtu janë abstraksionet e dizajnuara siç duhet. Unë mendoj se ky është çelësi i sistemeve kompjuterike si fushë në përgjithësi. Butler Lampson pëlqen ta përdorë këtë term dhe na quan "tregtarë në abstraksione". Teknologjitë e thjeshta nuk ekzistojnë sot. Procesorët që përdorim përmbajnë 10 miliardë transistorë - thjeshtësia është jashtë diskutimit. Në të njëjtën kohë, ISA është dukshëm më i thjeshtë se procesori, pasi ne punuam shumë për të siguruar performancë të lartë dhe një ndërfaqe relativisht të thjeshtë për të. Por edhe me të, jo gjithçka po shkon mirë. I njëjti problem ekziston me përshpejtuesit që po shfaqen tani në treg. Lindin pyetje: si të krijohet ndërfaqja e duhur për GPU-në, motorin e enkriptimit, kompresimin, motorin e transkodimit, motorin e algjebrës lineare, apo edhe një FPGA më fleksibël. Si të krijohet një ndërfaqe që do të sigurojë lehtësinë e përdorimit dhe do të fshehë kompleksitetin? Jo ta heqim qafe, por përkundrazi ta fshehim nga programuesi mesatar. 

AlexE kuptoj që ende kemi një pengesë për të kuptuar abstraksionet. Merrni modelin e kujtesës; në fazën tonë të zhvillimit shkencor dhe teknologjik, është një nga abstraksionet më të rëndësishme. Ai i ndan të gjithë programuesit në dy grupe: shumica - ata që nuk e kuptojnë atë, dhe pakica - ata që e kuptojnë, ose mendojnë se e kuptojnë. 

MichaelËshtë një pyetje e mirë - a e kupton ndonjëri prej nesh vërtet modelin e kujtesës?

ВиталийSidomos në C++.

MichaelFol ndonjëherë me Hans Boehm. Ai është një nga njerëzit më të zgjuar që njoh, një ekspert kryesor në modelet e kujtesës. Do të të thotë menjëherë se nuk kupton shumë prej tyre. Por duke u kthyer te çështja e abstraksioneve, mendoj se ideja më e rëndësishme në fushën e modeleve të kujtesës gjatë 30 viteve të fundit është shprehur nga në disertacionin e Sarita Adwe-s(Shënim i redaktorit: një listë e plotë e botimeve është në dispozicion) по ссылке).

AlexPyetja ime është: a vjen kjo pengesë nga vetë natyra e konceptit? 

MichaelJo. Sarita arriti në përfundimin se me qasjen e duhur, mund ta fshehësh me sukses të gjithë kompleksitetin, të arrish performancë të lartë dhe t'i ofrosh programuesit një API të thjeshtë. Dhe nëse e ndjek këtë API, mund të arrish qëndrueshmëri sekuenciale. Unë besoj se ky është modeli i duhur. Shkruaj kod pa gara të dhënash dhe do të marrësh qëndrueshmëri sekuenciale. Sigurisht, për të zvogëluar mundësinë e garave të të dhënave, nevojiten mjete të specializuara, por kjo është një çështje tjetër. 

VladimirA ka pasur ndonjë rast në karrierën tuaj ku një problem që dukej i zgjidhur papritmas u shndërrua në një katastrofë, ose ku doli të ishte i pazgjidhshëm? Për shembull, në teori, është e mundur të faktorizohet çdo numër ose të përcaktohet nëse ndonjë numër është i thjeshtë. Por në praktikë, kjo mund të jetë e vështirë; me pajisjet aktuale, është e vështirë të faktorizohen numrat. A ju ka ndodhur ndonjëherë diçka e tillë?

MichaelNuk më vjen ndërmend diçka e tillë që në fillim. Kishte raste kur mendoja se nuk kishte asgjë më për të bërë në një zonë të caktuar, dhe pastaj ndodhte diçka e re dhe interesante. Për shembull, mendoja se fusha e radhëve të pakufizuara kishte arritur tashmë pjekurinë. Pas disa përmirësimeve në radhën MNS, asgjë e veçantë nuk ndodhi më. Dhe pastaj Morrison (Adam Morrison) dhe Afek (Yehuda Afek) shpikën Radha e LCRQU bë e qartë se një radhë shumëfillesore e pakufizuar ishte e mundur, me vetëm udhëzimin "fetch-and-increment" në rrugën kritike shumicën e kohës. Dhe kjo lejoi një përmirësim të performancës në një rend të madhësisë. Nuk është se ne nuk e dinim tashmë që "fetch-and-increment" ishte një veçori shumë e dobishme. Eric Freudenthal shkroi për këtë në punimin e tij mbi Ultracomputer me Allan Gottlieb në fund të viteve 1980, por kjo ishte për radhë të kufizuara. Morrison dhe Afek ishin në gjendje të përdornin "fetch-and-increment" në një radhë të pakufizuar.

Arkitektura të Reja: A po i afrohet fitores kujtesa transaksionale?

VladimirA i ndiqni me vëmendje zgjidhjet e reja arkitekturore që mund të jenë të dobishme për algoritmet? 

MichaelSigurisht, ka shumë gjëra që do të doja t’i shihja të zbatuara. 

VladimirDhe cilat, për shembull?

MichaelPara së gjithash, disa zgjerime të thjeshta në memorien tonë transaksionale në nivel hardueri në procesorët Intel dhe IBM. Në veçanti, do të doja t'i bëja ngarkesat dhe depozitat jo-transaksionale menjëherë të disponueshme brenda transaksioneve. Ato çojnë menjëherë në sythe në sekuencën që ndodh para, kështu që mund të jenë të ndërlikuara. Por nëse ruajmë shtresa abstraksioni, ka shumë gjëra shumë interesante që mund të bëhen jashtë një transaksioni ndërsa është në zhvillim e sipër. Nuk e di sa e vështirë do të ishte për t'u zbatuar, por do të ishte shumë e dobishme. 

Një tjetër veçori e dobishme është ngarkimi i memorjes së përkohshme nga memoria e largët. Mendoj se kjo do të zbatohet herët a vonë. Kjo teknologji do të lejojë krijimin e sistemeve me memorie të disagreguar. Do të jetë e mundur të ruhen, le të themi, 100 terabajt memorie të qëndrueshme në një raft, dhe sistemi operativ do të vendosë në mënyrë dinamike se cilat pjesë të kësaj memorieje duhet të lidhen me hapësirën fizike të adresave të procesorëve. Kjo do të ishte jashtëzakonisht e dobishme për cloud computing, pasi do të lejonte që sasi të mëdha memorieje t'u caktohen detyrave që e kërkojnë këtë. Mendoj se dikush përfundimisht do ta bëjë këtë.

ВиталийPër ta mbyllur diskutimin mbi memorien transaksionale, kam edhe një pyetje tjetër të lidhur me këtë. A do t’i zëvendësojë memoria transaksionale përfundimisht strukturat standarde të të dhënave me shumë fije?

MichaelJo. Transaksionet janë një mekanizëm spekulativ. Në nivelin e programimit, ato janë kyçe atomike, por në brendësi, ato janë spekulime. Ky lloj parashikimi funksionon vetëm nëse shumica e hamendësimeve janë të sakta. Kjo është arsyeja pse memoria transaksionale funksionon mirë kur fijet mezi bashkëveprojnë me njëra-tjetrën, dhe ju vetëm duhet të siguroheni që nuk ka bashkëveprim. Por nëse një mesazh fillon midis fijeve, transaksionet janë pak të dobishme. Më lejoni të sqaroj: po flasim për rastin kur transaksionet janë të mbështjella rreth të gjithë operacionit atomik. Ato ende mund të përdoren me sukses si blloqe ndërtimi për strukturat e të dhënave me shumë fije. Për shembull, nëse keni nevojë për një CAS me tre fjalë, dhe ju duhet të bëni shumëfije tre gjëra të vogla në mes të një algoritmi vërtet shumëfijesh që punon me njëzet fije njëkohësisht. Shkurt, transaksionet mund të jenë të dobishme, por ato nuk eliminojnë nevojën për të projektuar siç duhet strukturat e të dhënave me shumë fije. 

Memorie jo e paqëndrueshme, Optane DIMM, pajisje ultra të shpejta.

ВиталийGjëja e fundit që do të doja të diskutoja është tema juaj aktuale e kërkimit: memoria jo e paqëndrueshme. Çfarë mund të presim në këtë fushë në të ardhmen e afërt? A jeni në dijeni të ndonjë implementimi ekzistues dhe efikas? 

MichaelUnë nuk jam ekspert i pajisjeve, di vetëm atë që lexoj në lajme dhe atë që më thonë kolegët e mi. Të gjithë e kanë dëgjuar tashmë që Intel po shet Optane DIMM, të cilat kanë rreth 3 herë më shumë vonesë leximi dhe 10 herë më shumë vonesë shkrimi sesa RAM dinamik. Ato së shpejti do të jenë të disponueshme në kapacitete shumë të mëdha. Është qesharake të mendosh se mund të kesh një laptop me disa terabajt RAM të adresueshëm në bajt. Është mjaft e mundur që brenda 10 vitesh, të vendosim ta përdorim këtë teknologji të re në të njëjtën mënyrë siç përdorim DRAM - thjesht të vazhdojmë të shtojmë më shumë kapacitet. Por jo-volatiliteti hap mundësi krejtësisht të reja. Ne mund ta ndryshojmë rrënjësisht pirgun e ruajtjes në mënyrë që të mos ketë ndarje midis memories punuese të adresueshme në bajt dhe memories persistente të strukturuar në bllok. Kjo do të thotë që nuk kemi nevojë të serializojmë gjithçka që na nevojitet në skedarë të strukturuar në bllok - ta transferojmë atë nga një program që ekzekutohet në tjetrin. Kjo ka shumë implikime të rëndësishme për sistemet operative, mjediset e kohës së ekzekutimit dhe ruajtjen e të dhënave të shpërndara. Është një fushë shumë interesante për të punuar. Personalisht, është e vështirë për mua të parashikoj se në çfarë do të çojë e gjithë kjo, por problemet këtu janë jashtëzakonisht interesante. Mund të ketë ndryshime revolucionare këtu, dhe ato vijnë shumë natyrshëm nga puna në multithreading, meqenëse rikuperimi nga rrëzimet është një proces "me shumë fije" krahas funksionimit normal të sistemit. 

Tema e dytë kryesore mbi të cilën po punoj aktualisht është menaxhimi i pajisjeve ultra të shpejta dhe qasja e sigurt në to nga hapësira e përdoruesit me kontroll të politikave në nivel sistemi. Në vitet e fundit, ka pasur një trend drejt zhvendosjes së aksesit të pajisjeve në hapësirën e përdoruesit. Kjo për shkak se pirgu TCP-IP i bërthamës nuk mund të funksionojë sipër një ndërfaqeje rrjeti që kërkon një paketë të re çdo 5 mikrosekonda; thjesht nuk do të vazhdojë. Prandaj, shitësit ofrojnë akses të drejtpërdrejtë në pajisje. Megjithatë, kjo do të thotë që sistemi operativ humbet kontrollin mbi procesin dhe nuk mund të sigurojë akses të duhur në pajisje për aplikacionet konkurruese. Grupi ynë i kërkimit beson se ky pengesë mund të shmanget. Ne do të paraqesim një punim në lidhje me këtë në USENIX ATC këtë muaj. Ka të bëjë me punën mbi qëndrueshmërinë, pasi memoria e qëndrueshme, e adresueshme në bajt, është në thelb një pajisje me hyrje/dalje ultra të shpejta që duhet të aksesohet në hapësirën e përdoruesit. Këto studime mundësojnë qasje të reja ndaj mikrobërthamave, ekzokerneleve dhe përpjekjeve të tjera tradicionale për të zhvendosur në mënyrë të sigurt funksionalitetin nga bërthama e sistemit operativ në hapësirën e përdoruesit. 

VladimirMemoria e adresueshme me bajt është shumë e mirë, por ka një kufi fizik - shpejtësia e dritës. Kjo do të thotë se do të ketë në mënyrë të pashmangshme një vonesë gjatë bashkëveprimit me pajisjen. 

Michael: Plotësisht e drejtë.

VladimirA do të ketë kapacitet të mjaftueshëm për të përballuar ngarkesat e reja?

MichaelKjo është një pyetje e shkëlqyer, por është e vështirë për mua t'i përgjigjem. Ideja e përpunimit në kujtesë ka ekzistuar prej kohësh; është shumë interesante, por edhe shumë komplekse. Nuk kam punuar në atë fushë, por do të ishte shumë mirë nëse do të bëheshin disa zbulime. Kam frikë se nuk kam asgjë më shumë për të shtuar. 

VladimirEkziston një problem tjetër. Sasi të reja, dukshëm më të mëdha RAM-i do të jenë të pamundura për t'u futur në CPU. Prandaj, për shkak të kufizimeve fizike, kjo RAM duhet të izolohet. 

MichaelKëtu, gjithçka varet nga numri i defekteve në prodhimin e qarqeve të integruara. Nëse do të ishte e mundur të krijoheshin pllaka gjysmëpërçuese krejtësisht pa defekte, atëherë prej tyre mund të bëhej një mikroçip i plotë. Por tani për tani, nuk mund të bëjmë mikroçipa më të mëdhenj se pullat postare. 

VladimirPor prapë po flasim për madhësi gjigante, centimetra. Kjo ndikon në mënyrë të pashmangshme në vonesë. 

MichaelPo. Nuk ka asgjë që mund të bësh në lidhje me shpejtësinë e dritës. 

Vladimir: Për fat të keq. 

Trendi i radhës i madh. Strukturat e dyfishta të të dhënave. Hydra.

ВиталийSiç e kuptoj unë, ju i përqafoni shumë shpejt trendet e reja. Ishit një nga të parët që punuat me kujtesën transaksionale dhe një nga të parët në kujtesën jo-volatile. Cili mendoni se do të jetë trendi i madh i radhës? Apo ndoshta është sekret?

MichaelSinqerisht, nuk e di. Shpresoj të jem në gjendje të dalloj diçka të re kur të dalë në pah. Nuk kam qenë aq me fat sa të shpik i vetëm ndonjë fushë të re, por kam qenë aq me fat sa të kem një avantazh në fushat e reja të krijuara nga të tjerët. Shpresoj të mund të vazhdoj ta bëj këtë në të ardhmen.

AlexPyetja e fundit në këtë intervistë ka të bëjë me prezantimin tuaj në Hydra dhe klasën tuaj në shkollë. Nëse e kuptoj saktë, fjalimi juaj në shkollë do të jetë rreth algoritmeve pa bllokim, dhe fjalimi juaj në konferencë do të jetë rreth strukturave të të dhënave të dyfishta. A mund të thoni disa fjalë rreth këtyre fjalimeve?

MichaelNe kemi prekur tashmë disa nga këto tema në këtë intervistë. Bëhet fjalë për punën që bëra me studentin tim Bill Scherer. Ai shkroi disertacionin e tij mbi të, dhe Doug Lee gjithashtu kontribuoi në të, dhe në fund të fundit u bë pjesë e radhëve sinkrone shumëfillesore në bibliotekën Java. Supozoni se po lexoni dhe shkruani në një strukturë të dhënash pa bllokim, që do të thotë se çdo operacion ka një numër të kufizuar udhëzimesh në rrugën kritike. Nëse përpiqeni të merrni të dhëna nga një enë bosh, ose përpiqeni të merrni të dhëna specifike që nuk janë në atë enë, menjëherë ju thuhet se nuk mund të bëhet. Por kjo sjellje mund të jetë e papranueshme nëse një fije me të vërtetë ka nevojë për këto të dhëna. Gjëja e parë që ju vjen në mendje është të krijoni një lak që pyet vazhdimisht nëse të dhënat e kërkuara kanë mbërritur. Por kjo krijon ndërhyrje për të gjithë të tjerët. Për më tepër, me këtë qasje, mund të prisni 10 minuta, dhe pastaj ndonjë fije tjetër mund të vijë dhe aksidentalisht të marrë të dhënat e kërkuara i pari. Strukturat e të dhënave të dyfishta ende nuk kanë bllokime, por ato lejojnë pritjen e duhur të fijeve. Termi "i dyfishtë" do të thotë që struktura përmban ose të dhëna ose kërkesa për të dhëna - le t'i quajmë ato anti-të dhëna. Pra, nëse përpiqeni të merrni diçka nga një enë bosh, një kërkesë do të vendoset në enë. Tani një fije mund të presë për një kërkesë pa shqetësuar askënd tjetër. Për më tepër, struktura e të dhënave i jep përparësi kërkesave, në mënyrë që pas marrjes, t'i kalojë ato te fija përkatëse. Kjo rezulton në një mekanizëm pa kyçje që ka një specifikim formal dhe performancë të mirë në praktikë. 

AlexCilat janë pritjet tuaja për këtë strukturë të dhënash? A do ta përmirësojë performancën në të gjitha rastet tipike, apo është më e përshtatshme për situata specifike? 

MichaelËshtë e dobishme kur, së pari, nevojitet një kontejner pa kyçje, dhe së dyti, pritja është e nevojshme kur të dhënat duhet të merren nga kontejneri që nuk është tashmë atje. Për aq sa di unë, struktura jonë ofron sjellje optimale kur plotësohen këto dy kushte. Prandaj, unë rekomandoj përdorimin e saj në këto raste. Avantazhi kryesor i strukturave të të dhënave pa kyçje është se ato shmangin problemet e performancës. Dhe pritja është shumë e rëndësishme në shumë algoritme kur të dhënat transferohen nga një fije në tjetrën.

ВиталийMë lejoni të sqaroj: a do të flisni për të njëjtën gjë si në shkollë ashtu edhe në konferencë?

MichaelNë shkollë Unë do të flas Ky mësim do të përqendrohet në strukturat e të dhënave me shumë fije në përgjithësi, me një hyrje të përgjithshme në parimet themelore në fillim. Supozoj se audienca e di se çfarë janë fijet dhe është e njohur me kyçjet. Duke u bazuar në këtë themel, do të diskutoj strukturat e të dhënave pa kyçje. Do të jap një pasqyrë të përgjithshme të çështjeve më të rëndësishme në këtë fushë, duke prekur tema si menaxhimi i kujtesës. Nuk mendoj se do të ketë diçka më komplekse se radha e MS.

AlexA planifikoni të trajtoni strukturat e dyfishta të të dhënave në fund të orës së mësimit në shkollë?

MichaelDo t'i përmend, por nuk do të shpenzoj shumë kohë me to. Do të mbaj një fjalim mbi Hydra-n rreth tyre. Do të trajtohet projekti që përfundimisht u bë pjesë e Java-s, si dhe puna ime me Joe Israelevich në krijimin e një varianti me radhë të dyfishtë të LCRQ-së, dhe krijimi i një konstruksioni pothuajse universal për strukturat e të dhënave të dyfishta.

AlexPra, leksioni shkollor mund të rekomandohet për fillestarët, dhe leksioni mbi strukturat e të dhënave të dyfishta në Hydra për njerëzit me njëfarë përvoje?

MichaelMë korrigjoni nëse gabohem, por audienca në Hydra do të jetë mjaft e larmishme, duke përfshirë shumë ekspertë të Java-s dhe njerëz që nuk punojnë posaçërisht me programim shumëfillezor. 

ВиталийPo, kjo është e vërtetë.

AlexTë paktën shpresojmë kështu.

MichaelNë këtë rast, do të përballem me të njëjtin problem me të cilin e filluam këtë intervistë: si të bëjmë një raport që është mjaftueshëm i pasur me detaje teknike dhe i arritshëm për të gjithë dëgjuesit.

ВиталийA do ta mbani prezantimin tuaj siç do të bënit me një leksion? Domethënë, a do të angazhoheni me audiencën dhe do të përshtateni me situatën?

MichaelKam frikë se kjo nuk do të funksionojë sepse prezantimi do të ketë diapozitiva. Diapozitivat janë të rëndësishme kur publiku fillimisht flet gjuhë të ndryshme. Shumë do të kenë vështirësi të më kuptojnë në anglisht, veçanërisht nëse flas shumë shpejt. I zgjodha këto tema posaçërisht sepse Petr Kuznetsov Ai më kërkoi të flisja rreth strukturave të të dhënave pa kyçje në Shkollën SPTDC; pastaj ata kishin nevojë për një fjalim për konferencën e Grupit të Përdoruesve Java, dhe unë doja të zgjidhja diçka që do të ishte me interes specifik për programuesit Java. Mënyra më e lehtë ishte të flisja rreth veçorive të bibliotekës Java mbi të cilën kisha punuar në një mënyrë ose në një tjetër. 

AlexNe supozojmë se audienca e Hydra-s tashmë di diçka rreth programimit pa bllokim dhe ndoshta ka njëfarë përvoje në këtë fushë. Por ky është vetëm një supozim; situata do të bëhet më e qartë në vetë konferencën. Sidoqoftë, faleminderit për kohën tuaj. Jam i sigurt që lexuesit tanë do ta gjejnë intervistën shumë interesante. Faleminderit shumë!

ВиталийFaleminderit. 

MichaelDo të jem i lumtur t'ju takoj në Shën Petersburg. 

AlexEdhe ne kemi një qytet të bukur. A ke qenë ndonjëherë këtu?

MichaelJo, nuk kam qenë kurrë në Rusi. Por Shën Petersburgu ka qenë gjithmonë në listën time të vendeve që nuk kam qenë kurrë, por që dua vërtet t’i vizitoj, kështu që u emocionova shumë kur mora ftesën. 

AlexNga rruga, do të ofrojmë një program turneu për folësit. Faleminderit shumë për intervistën dhe ju uroj një ditë të mbarë!

Mund ta vazhdoni bisedën me Michaelin në konferencën Hydra 2019, e cila do të mbahet më 11-12 korrik 2019, në Shën Petersburg. Ai do të prezantojë një raport. Struktura të dyfishta të të dhënave. Biletat mund të blihen në faqen zyrtare.

Burimi: www.habr.com

Shto një koment