вторник, 29 сентября 2009 г.

Знакомьтесь - Дмитрий Вьюков

Дмитрий Вьюков является постоянным читателем Блога. Мы с ним списались, вот что он пишет о себе:

Первое знакомство с атомарными переменными

Стоит взглянуть для начального знакомства на описание пакета java.util.concurrent.atomic в javadoc.
Работа с атомарными переменными также приводит к установлению отношения happend-before между потоками. Детальнее смотрите по ссылке выше.

Микро-курс по concurrency от SUN

Тут микро-курс по concurrency от SUN. Даже с двумя упражнениями в конце :). Стоит прочитать.
P.S. Кстати тут и тут просто множество коротеньких курсов от SUN по разнообразным базовым темам из Явы.

Материалы по lock-free

Тут в Вики статья "Non-blocking synchronization". Обратите внимание на различия в Wait-freedom, Lock-freedom и Obstruction-freedom.
Тут в Вики часть статьи "Lock" с подзаголовком "The problems with locks".
Тут на русском, тут на английском статья "Введение в неблокирующие алгоритмы". Рассматриваются:
- Неблокирующий счетчик
- Неблокирующий стек Трайбера (Treiber)
- Неблокирующая очередь Майкла-Скотта (Michael-Scott)

P.S. Именно очередь Майкла-Скотта использована в java.util.concurrent.ConcurrentLinkedQueue. Там в javadoc так и написано "This implementation employs an efficient "wait-free" algorithm based on one described in Simple, Fast, and Practical Non-Blocking and Blocking Concurrent Queue Algorithms by Maged M. Michael and Michael L. Scott.".

Lock-free BlockingStack

Дмитрий Вьюков в комментах спрашивает "А слабо к этому стеку прикрутить блокирующую семантику, что бы pop() на пустом стеке блокировался до появления элемента, и так что бы стек оставался lock-free пока есть элементы?". Отвечаю - не слабо:

понедельник, 28 сентября 2009 г.

Заметка о теоретических основах многопоточности

Было бы странно, если бы каждая корпорация, группа и т.д., занимающаяся развитием систем основанных на многопоточности, каждый раз изобретала велосипед. В 1989 году стартовала конференция Concure (Concurrency Theory) на которой обсуждаются теоретические основы многопоточности и их применение. Эта конференция, преимущественно, каждый год проходит в новой стране. В этом году она проходила в Болонье (Италия).
http://concur09.cs.unibo.it/
Цитата: "CONCUR 09, the 20th International Conference on Concurrency Theory, will take place in Bologna, on September 1-4, 2009. The purpose of the CONCUR conferences is to bring together researchers, developers, and students in order to advance the theory of concurrency, and promote its applications. "
Материалы всех конференция можно найти в интернет-магазине infibeam.com. Если удастся найти материалы или обзор в свободном доступе, обязательно выложу хотя бы те направления, которые на данный момент являются наиболее перспективными.


воскресенье, 27 сентября 2009 г.

Еще книги по Java Concurrent Programming

Еще книги по Java Concurrent Programming:
1) Грегори Р. Эндрюс "Основы многопоточного, параллельного и распределенного программирования" (есть у Игоря в djvu, у Ивана и Романа - в бумажном виде). Отличная книга, стоит иметь на книжной полке. Я купил в Буксе за 40 гривен. Много теории не привязанной к конкретному языку, более 250 упражнений (вообще великолепно:)). Настоящий университетский учебник.
2) "Java Thread Programming" by Paul Hyde Sams © 1999, 510 pages, ISBN: 0672315858. Очень хорошая книга для старта. Автор разбирает большинство моментов программирования потоков именно на яве. Вот оглавление:
Part I        Threads
Chapter 1 - Introduction to Threads
Chapter 2 - A Simple Two-Thread Example
Chapter 3 - Creating and Starting a Thread
Chapter 4 - Implementing Runnable Versus Extending Thread
Chapter 5 - Gracefully Stopping Threads

лекция #2: NonBlockingStack

Реализация неблокирующего стека на java.util.concurrent.atomic.AtomicReference:
import java.util.concurrent.atomic.AtomicReference;
import java.util.EmptyStackException;

class NonBlockingStack {
private AtomicReference head = new AtomicReference(null);
public void push(int data) {
for (; ;) {
Node next = (Node) head.get();
Node myNode = new Node(data, next);
if (head.compareAndSet(next, myNode)) {
return;
}
}
}

суббота, 26 сентября 2009 г.

лекция #2: BoundedBuffer

Реализации ограниченного буфера
1) с использованием synchronized/wait()/notifyAll()
2) с использованием Lock/Condition
3) тест
Обе реализации получены модификацией исходного кода класса java.util.concurrent.ArrayBlockingQueue.

A Survey of Concurrency Constructs

В презентации от SUN "A Survey of Concurrency Constructs" рассматриваются различные подходы в утилизации многоядерности + перечисляются плюсы/минусы каждого подхода:
- Threads/Locks
- Actors
- Dataflow
- Tuple spaces

concurrency-interest

Тут (concurrency-interest archive), пожалуй, один из лучших источников информации относительно всего, что касается многопоточности/многоядерности для java.
В данной переписке, например, авторы java.util.concurrent обсуждают собственную библиотеку.

Matlab: Parallel Computing Toolbox 4.2

В Matlab, как оказалось, можно
1) параллелить приложения с помощью Parallel Computing Toolbox, data sheet
2) растягивать на кластер с помощью Distributed Computing Server, data sheet

Я работал одно время на Матлабе, простой втроеный язык M, возможность компилировать программы в исполнимый код, возможность писать методы на C, возможность использовать java прямо в Матлабе. +естественно, куча математических библиотек и неповторимая визуализация чего-угодно из матфизики.

В Группу добавлены Роман Николаенко и Игорь Волков.

    В Kharkov Concurency Group добавилось два человека.
    Авторами блога KharkovConcurencyGroup.blogspot.com теперь являются Головач Иван, Роман Николаенко, Игорь Волков.
    Я, Головач Иван, теперь буду постить новости от своего имени (не от KhCGroup).

    P.S. Роман и Игорь - примите приглашения на своих gmail-ящиках.

пятница, 25 сентября 2009 г.

лекция #2: словарь

    На лекции #2 пополнили словарь:
- conditional waiting
- Producer-Consumer pattern
- Push or Pop model
- Bounding Buffer
- atomic variables (java.util.concurrent.atomic.*)
- CAS: compareAndSwap
- non-blocking algorithms

лекция #2: Thread.State

    У класса Thread есть метод getState(), который возвращает State, который может иметь значения:
"A thread state. A thread can be in one of the following states:
  • NEW
    A thread that has not yet started is in this state.
  • RUNNABLE
    A thread executing in the Java virtual machine is in this state.
  • BLOCKED
    A thread that is blocked waiting for a monitor lock is in this state.
  • WAITING
    A thread that is waiting indefinitely for another thread to perform a particular action is in this state.
  • TIMED_WAITING
    A thread that is waiting for another thread to perform an action for up to a specified waiting time is in this state.
  • TERMINATED
    A thread that has exited is in this state.
A thread can be in only one state at a given point in time. These states are virtual machine states which do not reflect any operating system thread states."

лекция #1: happend-before

    Отношение Happend-Before устанавливается в нескольких случаях. Мы рассмотрели 3 из них (не все):
    1. Если один поток записал в volatile переменную, а другой считал из нее же (две записи, два чтения, чтение потом запись не устанавливают отношние).
    2. Если один поток выполнил Thread.start(), а второй - это стартонувший поток. Если один поток вышел из своего метода run() а второй ожидал его окончания по Thread.join().
    3. Если один поток освободил монитор объекта(вышел из синхронизированной секции), а второй захватил монитор того же объекта (вошел в синхронизированную секцию).

лекция #1: java.lang.Thread, java.lang.Runnable

    У класса java.lang.Thread использовались на лекции методы:
- Thread.start()
- Thread.run()
- Thread.join()
- Thread.sleep(1000)

    Использовался интерфейс java.lang.Runnable.

Что читать в интернете

    1. Для отслеживания современного состояния J2EE рекомендуется просматривать infoq.com, либо уже infoq.com/java. Рекомендуется просматривать у новостей заголовки, читать избранное.
    2. Для представления о том, что такое современное высокопроизводительное, маштабируемое, параллельное, устойчивое web- или enterprise- приложение рекомендуется читать статьи с highscalability.com. Есть описание архитектур google.com, amazon.com, ebay.com, etc.

лекция #1: словарь

Словарь, введенный на первой лекции:
ordering / reordering
visibility
casuality
atomicity
temporal logic
mutual exclusion
memory barrier
write barrier
read barrier
cache flush
fire
strong fire
weak fair
thread affinity

лекция #1: принципы группы

1. Открытость. Двери семинара всегда открыты. Никакой платы, никакой регистрации. Никаких ограничений по возрасту, по специальности, по ВУЗу. Информация должна быть бесплатной.
2. Честность. Никокой лжи и обмана, никаких манипуляций внутри группы. Плагиат жестоко карается.
3. Равноправие. Структура группы горизонтальна, все равноправны, отсутствуют лидеры, менеджеры, вожди.

devx.com: Go Parallel: Parallel and Multi-Core Articles

    Тут подборка из 9 статей с сайта devx.com в рубрике Go Parallel:
- Writing Parallel Programs with Erlang
- A Developer's Guide to Python 3.0: Standard Library
- Forking and Joining Java to Maximize Multicore Power
- Automatic Full Parallel Processing of Hierarchical SQL Queries
- Parallel and Concurrency Futures for Microsoft Developers
- Lots about Locks
- Plan for the Future: Express Parallelism, Don't Manage It
- Getting Started with the .NET Task Parallel Library: Multi-Core Case Studies
- Getting Started with the .NET Task Parallel Library

RSDN.ru: Что такое модель памяти? И с чем её едят?

    Тут пост с rsdn.ru "Что такое модель памяти? И с чем её едят?" Дмитрий Вьюков кратко намечает что такое Memory Model для ПРОЦЕССОРА. Сам текст краток, но вот ссылки!

    "Более детальную информацию по вопросу можно найти в документации по процессорам.
Например
    для архитектур IA-32 и Intel-64 это "Intel® 64 and IA-32 Architectures Software Developer’s Manual Volume 3A: System Programming Guide, Part 1":
http://www.intel.com/design/processor/manuals/253668.pdf
(CHAPTER 7 MULTIPLE-PROCESSOR MANAGEMENT)
    Для Itanium это "Intel® Itanium® Architecture Software Developer’s Manual Volume 2: System Architecture":
http://download.intel.com/design/Itanium/manuals/24531805.pdf
(MP Coherence and Synchronization)
    Для SPARC это "The SPARC Architecture Manual":
www.sparc.org/standards/SPARCV9.pdf
(8 Memory Models)
    Так же хорошее введение в упорядочивание инструкций современными процессорами "Memory Ordering in Modern Microprocessors, Part I & II" (by Paul E. McKenney):
http://www.linuxjournal.com/article/8211
http://www.linuxjournal.com/article/8212"

Intel® Software Network: Правильная параллелизация

    Тут еще статья с российского сайта Intel "Правильная параллелизация". Виктор Черепанов рассказывает, как они распараллеливали видеокодек H.264. Алгоритм параллелизации патентовать будут.

Intel® Software Network: Оттенки FIFO

    Тут статья от российского сайта Intel "Оттенки FIFO". Сказать по честному - не осилил. Нашел ночью уже. Дмитрий Вьюков рассматривает различные оттенки дисциплины обслуживания FIFO (First In First Out), т.е. очередей - первым в очередь стал - первым и обработаешься. Микрофон Дмитрию:
    "В однопоточном окружении всё очень просто - у нас либо есть FIFO, либо нет FIFO совсем. Причин иметь какие-либо промежуточные варианты обычно практически нет. Однако в многопоточном окружении ситуация становится интереснее, т.к. промежуточные варианты могут иметь существенные последствия для производительности и/или масштабируемости. Итак, какие варианты есть в многопоточном окружении (в порядке убывания свойств, т.е. каждый последующий вариант есть подмножество предыдущего):
- полный FIFO, или причинно-следственный FIFO (causal FIFO)
- FIFO для каждого отдельного производителя (per-producer FIFO)
- почти FIFO (best-effort FIFO)
- отсутствие FIFO (no FIFO)"

    А вот так он ссылками разбрасывается:
"[1] Time, Clocks, and the Ordering of Events in a Distributed System. Leslie Lamport. 1978. http://research.microsoft.com/en-us/um/people/lamport/pubs/time-clocks.pdf
[2] Happened-before, http://en.wikipedia.org/wiki/Happened-before
[3] Vector clocks, http://en.wikipedia.org/wiki/Vector_clocks
[4] Lamport timestamps, http://en.wikipedia.org/wiki/Lamport_timestamps
[5] Erlang, http://erlang.org
[6] Erlang, http://en.wikipedia.org/wiki/Erlang_(programming_language)
[7] Streamflow, http://people.cs.vt.edu/~scschnei/streamflow/
[8] Scheduling Multithreaded Computations by Work Stealing. Robert D. Blumofe, Charles E. Leiserson. 1994. ftp://theory.lcs.mit.edu/pub/cilk/focs94.ps.Z"

вторник, 22 сентября 2009 г.

Chip Multithreading (CMT)

    Тут (Multithreaded Application Acceleration with Chip Multithreading (CMT), Multicore/Multithread UltraSPAR C® Processors) SUN популярно объясняет, чем вызвано использование CMT и какие дает преимущества на примере VoIP телефонии, поиска строк и антивирусной защиты. Если кратко, то большинство потоков в реальных приложениях заблокированы на операциях доступа к памяти (ОЗУ), имея много потоков на одно ядро можно быстро перебрасывать ресурсы ядра от блокированного потока к неблокированному.
    "Sun Microsystems was the first company to recognize that the speed of data access from memory was the critical bottleneck, and has overcome this problem with the chip multithreading (CMT) architecture that is the basis of the UltraSPARC® T1 and T2 processors."
    "Even if a particular thread stalls while waiting for data to be available from memory, the core can switch immediately to another thread and the pipeline remains continuously active, doing useful work."
    "These simpler pipelines can process a large number of simultaneous threads, rather than running a single thread as quickly as possible."

100.000 transactions-per-second

    Тут Oracle + Sun бросают вызов IBM по мощности DB-серверов.
    IBM на своем железе со своей DB2 выдала 100.000 tps, Oracle на железе и операционке от Sun обещает, что даст больше :).

Размеры крупнейших IT-компаний мира

Не мог не запостить.
* IBM - 398.455
* HP - 321.000
* Microsoft - 91.000
* Oracle - 86657
* Intel - 82.500
* Dell - 76.500
* Cisco - 66.129
* Sun - 33.556
* Apple - 32.000
* Amazon - 20.600
* Google - 20.164
* eBay - 16.200
* Yahoo - 13.600
* Adobe - 7335
* Baidu - 6393

Oracle will support Sun's hardware platform

    Был пост посвященный процессору от SUNа - Rock. Oracle заявила:
    "... на новейшие аппаратные разработки этой компании Oracle имеет «большие планы». Эллисон признает, что одним из мотивов, побудивших его корпорацию купить Sun, являются именно аппаратные разработки. ..."
    "... Определенно, что мы будем развивать существующий аппаратный бизнес, это самое главное, на чем мы намерены сейчас сосредоточиться. Этот подход не противоречит стратегии Oracle ...".

    А вся соль в том, что новейшие разработки SUNа - это в том числе Hardware Transaction Memory (HTM).

Sun's chip multithreading (CMT)

    Предыдущий пост был посвящен технологии Intel Hyper Threading, позволяющей работать на одном ядре 2 потокам. Это еще один тренд на рынке современных процессоров. Более ярким выразителем направления "много потоков на ядре" является Sun's chip multithreading (CMT) с процессором SUN UltraSPARK T2 - 8 ядер по 8 потоков, итого 64 потока одновременно. Ссылки с сайта:
    Datasheet
    Brochure
    Вот более свежая разработка Rainbow Falls - 16 ядер по 8 потоков, итого 128 потоков одновременно.

пятница, 18 сентября 2009 г.

Intel Hyper Threading

    Отсюда (Hyper-Threading Technology.pdf):
    "Hyper-Threading Technology makes a single physical processor appear as two logical processors; the physical execution resources are shared and the architecture state is duplicated for the two logical processors. From a software or architecture perspective, this means operating systems and user programs can schedule processes or threads to logical processors as they would on multiple physical processors. From a microarchitecture perspective, this means that instructions from both logical rocessors will persist and execute simultaneously on shared execution resources."
    "Hyper-Threading Technology makes a single physical processor appear as multiple logical processors [11, 12]. To do this, there is one copy of the architecture state for each logical processor, and the logical processors share a single set of physical execution resources. From a software or architecture perspective, this means operating systems and user programs can schedule processes or threads to logical processors as they would on conventional physical processors in a multiprocessor system. From a microarchitecture perspective, this means that instructions from logical processors will persist and execute simultaneously on
shared execution resources."
    "Each logical processor maintains a complete set of the architecture state. The architecture state consists of registers including the general-purpose registers, the control registers, the advanced programmable interrupt controller (APIC) registers, and some machine state registers. From a software perspective, once the
architecture state is duplicated, the processor appears to be two processors. The number of transistors to store the architecture state is an extremely small fraction of the total. Logical processors share nearly all other resources on the physical processor, such as caches, execution units, branch predictors, control ogic, and buses."
    В статье стоит прочитать хотя бы начало, для составления представления об общей архитектуре процессоров и набраться buzzwords:) вроде chip multiprocessing (CMP), time-slice multithreading, cache miss, branch mispredictions, simultaneous multi-threading, logical/physical processor, out-of-order execution.

среда, 16 сентября 2009 г.

Книги по Java Concurrent Programming

Базовые книги по Java Concurrent Programming:
1) Java Concurrency in Practice from Brian Goetz, Tim Peierls, Joshua Bloch, Joseph Bowbeer, David Holmes, Doug Lea.
Достаточно простая но профессиональная. Дает введение в java.util.concurrent. Не опускается на уровень примитивов (построение монитора вручную) и не шагает по верхушкам (архитектуры серверов). Рассматривает серединку.
2) Concurrent Programming in Java: Design Principles and Pattern (2nd Edition). Второе издание, не первое! Неустаревающая классика. Объясняет устройство примитивов, пишем библиотечные классы, архитектуры серверов, сама философия многопоточности от автора(Doug Lea) известнейших библиотек(j.u.c + Fork/Join).
3) The Art of Multiprocessor Programming from Maurice Herlihy, Nir Shavit. 2008 год, суперкнига! Как устроен процессор, как писать иерархические блокировки, CLH-queuelock и много другого. Просто россыпь безценного материала. Nir Shavit - Gödel prize 2004, член Sun Labs Scalable Synchronization Research Group.

Ресурсы по JMM

В качестве источников информации по Java Memory Model рекомендуется использовать:
1)JSR-133: JavaTM Memory Model and Thread Specification сама спецификация.
2) особое внимание обратить на The JSR-133 Cookbook for Compiler Writers from Doug Lea. Это примеры применения спецификации на практике. Doug Lea - один из соавторов JMM и автор java.util.conrurrent + Fork/Join framework.

В качестве дополнительного материала рекомендуется:
3)JLSv3. Chapter 17.Threads and Locks 17-я глава спецификации языка.
4)The "Double-Checked Locking is Broken" Declaration декларация, тщательно проясняющая что же было broken в старой модели памяти.
5)любые материалы с сайта http://www.cs.umd.edu/~pugh/java/memoryModel/. Bill Pugh главный куратор java memory model. Содержит огромное количество материала в том числе по иным моделям памяти, полезно для интересующихся, например, темпоральной логикой.

понедельник, 14 сентября 2009 г.

1.000.000 cores

[http://blogs.ft.com/techblog/2008/04/intel-and-amds-different-classes-of-business/]
Intel и Cray всерьез обсуждают как жить с 1.000.000 ядер в одной системе.
"They(Intel, Cray) would also work on how to take advantage of what is expected to be a grouping of as many as 1m processing cores in a single supercomputing system."

Sun, AMD, Nvidia, IBM, HP and Intel take 6M$ to Stanford for concurrency lab

[http://ppl.stanford.edu/wiki/index.php/Pervasive_Parallelism_Laboratory]
Стенфорд получил 6$ миллионов от Sun, AMD, Nvidia, IBM, HP and Intel на создание лаборатории по многопоточности/многоядерности.

Universal Parallel Computing Research Center at Berkeley

[http://parlab.eecs.berkeley.edu/]
Университет Беркли получил 10$ миллионов от Intel и Microsoft на исследования в области мультипоточности/мультиядерности.

Universal Parallel Computing Research Center at Illinois University

[http://www.upcrc.illinois.edu/]
Иллинойский Университет получил 10$ миллионов от Intel и Microsoft на исследования в области мультипоточности/мультиядерности.

[http://www.upcrc.illinois.edu/documents/UPCRC_Whitepaper.pdf]
Это описание того, чем занимаются в Иллинойсе.

[http://www.parallel.illinois.edu/]
А это - весь центр параллельных разработок в Иллинойсе.

воскресенье, 13 сентября 2009 г.

CPU designers debate multi-core future

[http://www.eetimes.com/showArticle.jhtml?articleID=206105179]
    Встреча разработчиков процессоров от



Shekhar Borkar, director of Intel Corp.'s Microprocessor Technology Lab, said microprocessor cores will get increasingly simple, but software needs to evolve more quickly than in the past to catch up.

software needs to evolve more quickly than in the past...

Rock from SUN - 16 cores/32 threads

    [http://en.wikipedia.org/wiki/Rock_(processor)]
    "The Rock processor implements the 64-bit SPARC V9 instruction set and the VIS 3.0 SIMD multimedia instruction set extension.Each Rock processor has 16 cores, with each core capable of running two threads simultaneously, yielding 32 threads per chip. Servers built with Rock use FB-DIMMs to increase reliability, speed and density of memory systems. The Rock processor uses a 65nm manufacturing process for a design frequency of 2.3 GHz.The maximum power consumption of the Rock processor chip is approximately 250W."

    Ко всему этому - это один из первых процессоров аппаратно поддерживающих Transactional Memory. А это одна из самых перспективных технологий для разработки баз данных, а Oracle купил SUN:)
    "In August 2007, Sun confirmed that Rock would be the first production processor to support transactional memory."

microprocessor Cell developed by Sony, Toshiba, and IBM

Процессор Cell - 9 ядер.
Как я понял, архитектура самого чипа легко расширяема для поддержки большего количества ядер [http://en.wikipedia.org/wiki/Cell_Processor].

ATI Radeon HD 5870 с 1600 потоковых процессоров.

    Просто привожу в качестве примера прогресса в разработке графических карт
[http://www.ixbt.com/news/all/index.shtml?12/36/71].
    399$ за 1600 ядер.

Sun Labs Scalable Synchronization Research Group

    Тут [http://research.sun.com/scalable/, http://research.sun.com/projects/dashboard.php?id=29] расположилась Sun Labs Scalable Synchronization Research Group. Эта группа сконцентрирована в основном на различных реализациях Software Transaction Memory (STM). Им принадлежат такие разработки, как dstm2, Hybrid Transactional Memory Library (SkySTM), Phased Transactional Memory (PhTM), Hybrid Transactional Memory (HyTM).
    По-моему мнению, dstm2 - одна из лучших реализаций STM. Кстати, Fortress, язык, позиционируемый как наследник Fortran, реализован как раз на dstm2.
    Также они заинтересованы в
    - Non-blocking Progress Conditions
    - Non-blocking Memory Management
    - Mostly Nonblocking Data Structures
    - Formal Verification
    Эти люди часто встречаются в качестве авторов важнейших статей и книг: Dave Dice, Maurice Herlihy, Victor Luchangco, Virendra Marathe, Mark Moir, Dan Nussbaum, Nir Shavit.

Golovach Ivan
  

Multithreading at Intel

    Тут [http://software.intel.com/en-us/multi-core/] расположилось сообщество Multithreading/Multicore разработчиков Intel. Нашел только ссылки на C++ (OpenMP, Intel TBB). На java-разработки не нашел ссылок.

Intel® Threading Challenge.

Конкурс многопоточных алгоритмов от Intel [http://software.intel.com/ru-ru/contests/Threading-Challenge-2009/codecontest.php].

суббота, 12 сентября 2009 г.

Twitter on Scala

    Поверх JVM может работать множество языков. Не только Java, но и Fortress, X10, Groovy, Clojure, Scala, Jython, JRuby, etc. С недавних пор наиболее критичные части сервиса Twitter стали переписывать на Scala. Одна из причин - в JVM лучше чем в Ruby реализована работа с потоками и использование памяти. [http://www.artima.com/scalazine/articles/twitter_on_scala.html]

    "One of the things that I’ve found throughout my career is the need to have long-lived processes. And Ruby, like many scripting languages, has trouble being an environment for long lived processes. But the JVM is very good at that, because it’s been optimized for that over the last ten years. So Scala provides a basis for writing long-lived servers, and that’s primarily what we use it for at Twitter right now."
    "Also, Ruby doesn’t really have good thread support yet. It’s getting better, but when we were writing these servers, green threads were the only thing available. Green threads don't use the actual operating system’s kernel threads. They sort of emulate threads by periodically stopping what they are doing and checking whether another “thread” wants to run. So Ruby is emulating threads within a single core or a processor. We wanted to run on multi-core servers that don’t have an infinite amount of memory. And if you don’t have good threading support, you really need multiple processes. And because Ruby’s garbage collector is not quite as good as Java’s, each process uses up a lot of memory. We can’t really run very many Ruby daemon processes on a single machine without consuming large amounts of memory. Whereas with running things on the JVM we can run many threads in the same heap, and let that one process take all the machine’s memory for its playground."

Scala - это actor-based language, но в ряде случаев разработчики предпоситают старые добрые блокировки Java.
"But for other parts we’ve just gone back to a traditional Java threading model. The engineer working on that, John Kalucki, just found it was a little bit easier to test, a bit more predictable. The nice thing was, it took minutes to switch code that was actor based over to something thread based. It was a couple of search and replaces. So it’s not so bad if actors fail you for whatever reason."
"I ran into the same thing in Kestrel, the queueing system. I started off with an actor for every single queue. I found that the work is so fine grained there that it was actually better at that tiny level to just use Java locks. Actors work great for having client connections, where there’s a bit of work overhead to what the actor is doing, and the code for handling client requests is very simple and straightforward."

Intel Teraflops Research Chip

Intel дорабатывает новый 80-ядерный чип [http://techresearch.intel.com/articles/Tera-Scale/1449.htm].
Цитаты:
"It is the first programmable chip to deliver more than one trillion floating point operations per second (1 Teraflops) of performance while consuming very little power."
"ASCI Red was the first computer to benchmark at a teraflops (1996). That system used nearly 10,000 Pentium® Pro processors running at 200MHz and consumed 500kW of power plus an additional 500kW just to cool the room that housed it. Although not a general purpose computing device, this Teraflops Research Chip delivers 1.0 teraflops of performance and 1.6 terabits aggregate core to core communication bandwidth, while dissipating only 62W."
Процессор выполняет эквивалент 1.000.000.000.000 операций с плавающей точкой в секунду и сравним по мощности с 10.000 Pentium Pro.

пятница, 11 сентября 2009 г.

Лекция #0

Общие материалы:

1) Главная статья к прочтению:
March 2005: Article By Herb Sutter "The Free Lunch Is Over: A Fundamental Turn Toward Concurrency in Software" [http://www.gotw.ca/publications/concurrency-ddj.htm].

2) частично дублирует первую:
September 2005: Article By HERB SUTTER AND JAMES LARUS, MICROSOFT: "Software and the Concurrency Revolution" [http://portal.acm.org/citation.cfm?id=1095421]

3) Сложный текст, требующий комментариев, но за 3 страницы дает представление о горизонтах на ближайшие 5 лет:
September 2006: Sun expert David Dice, senior staff engineer(JVM) blog: "Parallelism Manifesto" [http://blogs.sun.com/dave/entry/parallelism_manifesto]
Прошу обратить внимание на фразу "Traditional concurrent programming has been error-prone and difficult, making it expensive and best left to a small priesthood of specialists."

Технические материалы:

1) Пожалуй, главная статья, которая показала, что JMM не соответствует "принципу наименьшего удивления" и нуждается в изменении. Практически авторский состав этой статьи и занимался New JMM для Java 5. В статье идет речь о реализации паттерна Singleton с помощью Double-Checked Locking.
"Double-Checked Locking is Broken" [http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html]

2) Одна из причин введения в Java 5 класса java.util.concurrent.LockSupport. Документация из JDK, объясняющая
"Why Are Thread.stop, Thread.suspend, Thread.resume and Runtime.runFinalizersOnExit Deprecated?" [http://java.sun.com/j2se/1.5.0/docs/guide/misc/threadPrimitiveDeprecation.html]

Примеры:

1) Использование флага для остановки потока взято из Joshua Bloch "Effective Java (second edition)", Item 66: Synchronize access to shared mutable data, page 259.
Цитата "You might expect this program to run for about a second, after which the main thread sets stopRequested to true, causing the background thread’s loop to terminate. On my machine, however, the program never terminates: the background thread loops forever!"

2) Сознательное отсутствие использования синхронизации при работе с разделяемыми данными(private int hash) из многих потоков:
java.lang.String.java:

public final class String ... {
    ...    
    /** Cache the hash code for the string */
    private int hash; // Default to 0
    ...
    /**
     * Returns a hash code for this string. The hash code for a
     * String object is computed as
     * s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
     * using int arithmetic, where s[i] is the
     * ith character of the string, n is the length of
     * the string, and ^ indicates exponentiation.
     * (The hash value of the empty string is zero.)
     *
     * @return  a hash code value for this object.
     */
    public int hashCode() {
    int h = hash;
    if (h == 0) {
        int off = offset;
        char val[] = value;
        int len = count;

            for (int i = 0; i < len; i++) {
                h = 31*h + val[off++];
            }
            hash = h;
        }
        return h;
    }
    ...
} 


Golovach Ivan

четверг, 10 сентября 2009 г.

RSDN: потери на перезагрузке кэша данных

Отпостился в RSDN на тему 'потери на перезагрузке кэша данных'.
http://rsdn.ru/forum/java/3531888.1.aspx

Golovach Ivan

RSDN: скорость context switch

Отпостился в RSDN на тему скорость переключения контекста на современных процессорах'.
http://rsdn.ru/forum/java/3531425.1.aspx

Golovach Ivan

RSDN: reordering volatile and non-vilatile

Отпостился в RSDN на тему 'reordering volatile and non-volatile'.
http://rsdn.ru/forum/java/3532424.1.aspx

Golovach Ivan