Batches are always preferred. You cannot execute too much requests simultaneously by limits, and also requests, that take long time, can be closed by server (I don't know exact time, it is about 5-10 minutes). So, you need to balance between number of requests and time of their execution.
If you need to just get last messages, there must be no problems with batch with 500 core/search_item.
But if these 500 units are all units that are available to the user, you can use core/search_items with following params:
{"spec":{"itemsType":"avl_unit","propName":"sys_id","propValueMask":"*","sortType":"sys_id"},"force":1,"flags":1025,"from":0,"to":1000}
In propValueMask you can also specify ids separated by comma. Flags = 1025 it is 1 (base) + 0x400 (position & last message).