2012-05-24 3 views
2

Я пишу программу python, чтобы работать с окнами, программа имеет тяжелую потоковую обработку и ввод-вывод, она сильно использует сокеты в своем вводе-выводе для отправки и получения данных из удаленных мест, кроме этого, у него есть некоторые манипуляции с строкой, используя регулярные выражения.Производительность I/O сокета Python по сравнению с другими языками

Мой вопрос: производительность wise, python лучший язык программирования для такой программы, по сравнению с Java, или C#? Есть ли другой язык, который лучше соответствовал бы описанию выше?

+1

.Net - отличная платформа. Если вы работаете только с окнами, VB или C# будут хорошо интегрироваться. Действительно, это зависит от вас и команды, поддерживающей его больше, чем конкретного языка. – gahooa

+0

> является питоном лучший язык программирования для такой программы, по сравнению, например, с Java или C#? - на это невозможно ответить объективно. –

ответ

1

Ваши требования:

  1. работать на окнах;
  2. программа имеет тяжелую нарезание резьбы и I/O
  3. он сильно использует сокеты в I/O для передачи и приема данных
  4. имеет некоторые строки манипуляции с использованием регулярных выражений.

Причина, по которой трудно сказать окончательно, который является лучшим язык для решения этой задачи является то, что почти все языки соответствуют вашим требованиям.

  1. Окна: все языки заметок
  2. Интенсивное использование нитей: C#, Java, C, C++, Haskell, Scala, Clojure, Erlang. Обработанные потоки или другие работы вокруг: Ruby, Python и другие интерпретируемые языки без истинного мелкозернистого параллелизма.
  3. Sockets: все языки примечания
  4. : регулярные выражения для всех языков записки

Самое интересное ограничением является необходимость сделать массовый одновременный ввод-вывод. Это означает, что ваше узкое место будет связано с переключением контекста, стоимостью потоков и может ли вы запускать пулы потоков на нескольких ядрах. В зависимости от масштабирования вы можете использовать скомпилированный язык и один с легкими потоками, который может легко использовать несколько ядер. Это уменьшает список до C++, Haskell, Erlang, Java, Scala. и т. д. Возможно, вы можете обойти глобальную блокировку интерпретатора в Python с помощью forked-процессов, это просто не будет столь же мелкозернистым.

2

Интересный вопрос. Модули python, имеющие отношение к сокетам, напрямую связаны с базовыми функциональными возможностями ОС. Поэтому в данной операции вы вряд ли увидите разницу в скорости в зависимости от языка обертки.

Где вы заметили проблемы с скоростью на python, если вы участвуете в действительно тугой Зацикливание, как и просмотр каждого символа в потоке.

Вы не указали, сколько данных вы отправляете. Если вы не принимаете решение, которое должно поддерживать огромный объем ввода-вывода, то python, скорее всего, будет просто отлично. Внедрение nginx или memcached или redis в python ... не так хорошо, как идея.

И как всегда ... бенчмарк. Если это достаточно быстро, то зачем менять?

PS. вы, программист, скорее всего, сделаете это быстрее в python!

Смежные вопросы